在Jersey Grizzly上设置Swagger UI

时间:2016-07-14 13:15:55

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

所有在线教程都说你应该在“WebContent”下放置来自Swagger UI的“dist”文件夹,以使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处有关于此问题的公开问题;然而,它没有得到解决。

1 个答案:

答案 0 :(得分:0)

您是否托管静态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的内容将包含所有swagger UI内容。

Grizzly目前有一个如何处理静态资源路径的错误,因此当您访问文档时,您需要确保在结尾处有尾部斜杠。因此,例如它可能是localhost:9998/docs/