Swagger 与嵌入式 Jetty

Yah*_*iya 0 java embedded-jetty swagger

有人可以让我知道这是否是使用嵌入式码头配置 Swagger 的正确方法。

public class TestMain {

public static void main(String[] args) throws Exception {
    Server gs = new Server();
    ServletContextHandler sch = gs.getServletContextHandler();

    sch.addFilter(new FilterHolder(new RequestTrackerFilter()), "/*",     EnumSet.of(DispatcherType.REQUEST));
    sch.addFilter(new FilterHolder(new ActionIdFilter()), "/*", EnumSet.of(DispatcherType.REQUEST));

    ResourceHandler resource_handler = new ResourceHandler();
    resource_handler.setDirectoriesListed(false);

    resource_handler.setResourceBase("public/2.0");

    ContextHandler context = new ContextHandler("/apitest");

    context.setHandler(resource_handler);

    ContextHandlerCollection contexts = new ContextHandlerCollection();


   setupSwaggerContextHandler();

  //     context.getServletContext().addListener(new SwaggerInitializer());

    contexts.setHandlers(new Handler[]{sch, context});

    gs.getServer().setHandler(contexts);

    gs.start();
}

private static ServletContextHandler setupSwaggerContextHandler() {
    // Configure Swagger-core
    final ServletHolder swaggerServletHolder = new ServletHolder(new JerseyJaxrsConfig());
    swaggerServletHolder.setName("JerseyJaxrsConfig");
    swaggerServletHolder.setInitParameter("api.version", "1.0.0");
    swaggerServletHolder.setInitParameter("swagger.api.basepath", "http://localhost:9000/apitest");
    swaggerServletHolder.setInitOrder(2);

    final ServletContextHandler swaggerContextHandler = new ServletContextHandler();
    swaggerContextHandler.setSessionHandler(new SessionHandler());
    // Bind Swagger-core to the url HOST/api-docs
    swaggerContextHandler.setContextPath("/api-docs");
    swaggerContextHandler.addServlet(swaggerServletHolder, "/*");

    return swaggerContextHandler;
  }
}
Run Code Online (Sandbox Code Playgroud)

我无法看到任何输出使用

  http://localhost:9000/apitest/api-docs
Run Code Online (Sandbox Code Playgroud)

我正在关注https://groups.google.com/forum/#!topic/swagger-swaggersocket/KHYESESD6c4 上的讨论

Sri*_*ram 6

我玩了很多让 Swagger 在没有web.xml或 Spring 的情况下与嵌入式 Jetty 一起工作,最后得到了这个解决方案:https : //github.com/SriramKeerthi/swagger-jersey2-jetty

如果我有足够的声誉,我会将其添加为评论。但这是我能想到的最简单的代码版本。你需要两部分:

  1. Swagger Bean 配置:

    BeanConfig beanConfig = new BeanConfig();
    beanConfig.setVersion("1.0.0");
    beanConfig.setResourcePackage(YourJerseyResourceClass.class.getPackage().getName());
    beanConfig.setScan(true);
    beanConfig.setBasePath("/");
    beanConfig.setDescription("Sample API to demonstrate Swagger with Jersey2" +
            " in an embedded Jetty instance, with no web.xml or Spring MVC.");
    beanConfig.setTitle("Sample API");
    
    Run Code Online (Sandbox Code Playgroud)
  2. 添加:

    ResourceConfig resourceConfig = new ResourceConfig();
    // Add your resources and Swagger resources (ApiListingResource package)
    resourceConfig.packages(YourJerseyResourceClass.class.getPackage().getName(), ApiListingResource.class.getPackage().getName());
    ServletContainer servletContainer = new ServletContainer(resourceConfig);
    ServletHolder servletHolder = new ServletHolder(servletContainer);
    ServletContextHandler servletContextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);
    servletContextHandler.setContextPath("/");
    servletContextHandler.addServlet(servletHolder, "/*");
    
    Run Code Online (Sandbox Code Playgroud)

您现在应该能够spec/swagger.json端点看到 Swagger 。

PS irc.freenode.net 上#swagger 的团队非常出色,如果没有任何问题,您应该访问他们。