【问题标题】:Setup Swagger UI on Jersey Grizzly在 Jersey Grizzly 上设置 Swagger UI
【发布时间】:2016-11-17 10:28:39
【问题描述】:

所有在线教程都说您应该将 Swagger UI 中的“dist”文件夹放在“WebContent”下,以使 Swagger UI 正常工作。

但是如果我没有“WebContent”怎么办?!

我的 Jersey-Jaxrs-RESTful 应用程序在嵌入式 Grizzly 服务器上正常运行。

我已经正确设置了 Swagger,当我转到 localhost:9998/swagger.json 时,我可以看到 JSON 格式的所有 API 文档。现在,我想要的只是 Swagger UI 以在漂亮的 HTML 页面中显示此 JSON 数据。

我的问题是如何在没有 WebContent 文件夹和 web.xml 文件的情况下设置此 Swagger UI。

这是我的index.html JS 配置,用于启动 Swagger UI; url=http://localhost:9998/api/api-docs/swagger.json

我的应用程序配置:

@ApplicationPath("api")
public class ResConfig extends Application {
public ResConfig() {
    super();
    BeanConfig beanConfig = new BeanConfig();
    beanConfig.setVersion("1.0.2");
    beanConfig.setSchemes(new String[] { "http" });
    beanConfig.setHost("localhost:9998");
    beanConfig.setBasePath("/api");
    beanConfig.setResourcePackage("test.resources");
    beanConfig.setScan(true);
}


@Override
public Set<Class<?>> getClasses() {
    Set<Class<?>> resources = new HashSet<Class<?>>();
    resources.add(Res.class);

    resources.add(CrossDomainFilter.class);

    resources.add(io.swagger.jersey.listing.ApiListingResourceJSON.class);
    resources.add(io.swagger.jaxrs.listing.ApiListingResource.class);
    resources.add(io.swagger.jaxrs.listing.SwaggerSerializers.class);
    return resources;
}
}


public class CrossDomainFilter implements ContainerResponseFilter {
    public CrossDomainFilter() {
    }

    @Override
    public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException {
        responseContext.getHeaders().add("Access-Control-Allow-Origin", "*");
        responseContext.getHeaders().add("Access-Control-Allow-Headers", "");
        responseContext.getHeaders().add("Access-Control-Allow-Credentials", "");
        responseContext.getHeaders().add("Access-Control-Allow-Methods", "");
        responseContext.getHeaders().add("Access-Control-Max-Age", "");
    }
}

https://github.com/swagger-api/swagger-core/issues/958 上有一个关于此问题的未解决问题;但是没有解决。

【问题讨论】:

    标签: java swagger jersey-2.0 swagger-ui grizzly


    【解决方案1】:

    您是否托管静态 Swagger UI 文件?看起来像这样:

    ClassLoader loader = Main.class.getClassLoader();
    CLStaticHttpHandler docsHandler = new CLStaticHttpHandler(loader, "swagger/");
    docsHandler.setFileCacheEnabled(false);
    
    ServerConfiguration cfg = server.getServerConfiguration()
    cfg.addHttpHandler(docsHandler, "/docs/");
    

    swagger 文件夹的内容将包含所有招摇的 UI 内容。

    Grizzly 目前在处理静态资源路径方面存在错误,因此当您访问文档时,您需要确保末尾有斜杠。所以,例如它可能是localhost:9998/docs/

    【讨论】:

      猜你喜欢
      • 2016-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-03
      • 2016-02-14
      • 2011-08-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多