所有在线教程都说你应该在“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处有关于此问题的公开问题;然而,它没有得到解决。
答案 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/