我试图在一个Java应用程序上实现Swagger,该应用程序有两个Application类,因为一个处理“公共”Web服务,另一个处理“管理”Web服务。我试图生成两个单独的swagger.json文件,每个Application类一个。然而,两个URL只生成其中一个。下面是一些代码:
公共应用程序类:
@WebServlet
@ApplicationPath("/public")
public class PublicApplication extends Application {
public PublicApplication() {
BeanConfig beanConfig = new BeanConfig();
beanConfig.setVersion("1.0");
beanConfig.setTitle("A Fine Title");
beanConfig.setDescription("A Fine Description.");
beanConfig.setSchemes(new String[]{"http"});
beanConfig.setBasePath("/api");
beanConfig.setResourcePackage("com.test.rest.resource.external");
beanConfig.setPrettyPrint(true);
beanConfig.setScan(true);
}
}
字符串
私有应用程序类:
@WebServlet
@ApplicationPath("/admin")
public class AdminApplication extends Application {
public AdminApplication() {
BeanConfig beanConfig = new BeanConfig();
beanConfig.setVersion("1.0");
beanConfig.setTitle("Another Fine Title");
beanConfig.setDescription("Another Fine Description.");
beanConfig.setSchemes(new String[]{"http"});
beanConfig.setBasePath("/apiTwo");
beanConfig.setResourcePackage("com.test.rest.resource.internal");
beanConfig.setPrettyPrint(true);
beanConfig.setScan(true);
}
}
型
现在,如果我点击这些网址中的任何一个,我都会得到相同的“公共”swagger json文件:
我做错了什么?
感谢所有阅读的人!
2条答案
按热度按时间ecr0jaav1#
默认情况下,Swagger只初始化扫描仪和配置一次。如果你有多个应用程序或服务器,你需要通过
BeanConfig
为每个应用程序设置一个scannerId,scannerId和contextId,这应该与你的servlet配置中的值相匹配。我想这个设置只适用于最新版本的swagger。我用swagger-1.5.13试过。下面是一个例子。字符串
您的AdminApplication类
型
您还应该在servlet配置中指定URL ID、contextId和scannerId作为init参数,如下所示。
型
iq3niunx2#
我遇到了同样的问题,但与 Swagger v3。它花了我安静的一些努力来解决它,所以我想分享它。
字符串
如果您已经在
Application
类中注册了所有的jaxrs资源,那么这是可行的。io.swagger.v3.jaxrs2.SwaggerSerializers
。*