我正在尝试在具有两个应用程序类的 Java 应用程序上实现 Swagger,因为一个处理“公共”Web 服务,另一个处理“管理”Web 服务。我正在尝试生成两个单独的 swagger.json 文件,每个应用程序类一个。但是,仅为两个 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);
}
}
现在,如果我点击这些URL中的任何一个,我都会得到相同的“公共”swagger json文件:
我做错了什么?
感谢所有阅读的人!
默认情况下,Swagger 会初始化一次扫描程序和配置。如果您有多个应用程序或配置,则需要设置一个 configId、scannerId
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);
// Set configId,contextId & scannerId
beanConfig.setConfigId("public");
beanConfig.setContextId("public");
beanConfig.setScannerId("public");
beanConfig.setScan(true);
}
您的管理员应用程序类
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);
// Set configId,contextId & scannerId
beanConfig.setConfigId("admin");
beanConfig.setContextId("admin");
beanConfig.setScannerId("admin");
beanConfig.setScan(true);
beanConfig.setScan(true);
}
您还应该指定configId、contextId
<servlet>
<servlet-name>jersey-rest-public</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.test.rest.resource.PublicApplication</param-value>
</init-param>
<init-param>
<param-name>swagger.scanner.id</param-name>
<param-value>public</param-value>
</init-param>
<init-param>
<param-name>swagger.context.id</param-name>
<param-value>public</param-value>
</init-param>
<init-param>
<param-name>swagger.config.id</param-name>
<param-value>public</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>jersey-rest-admin</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.test.rest.resource.AdminApplication</param-value>
</init-param>
<init-param>
<param-name>swagger.context.id</param-name>
<param-value>admin</param-value>
</init-param>
<init-param>
<param-name>swagger.scanner.id</param-name>
<param-value>admin</param-value>
</init-param>
<init-param>
<param-name>swagger.config.id</param-name>
<param-value>admin</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
我有 和 两个不同的ApplicationPath和类如下所示。 如果我在param-value中取出一个包,这是有效的,如果我更改@Path注释之一,这也是有效的,所以这是我的配置的问题? 我用的是1.10号球衣。谢谢大家。
问题内容: JAX-RS 1.1规范在第6页上说: 如果不存在Application子类,则必须将添加的servlet命名为: 添加的servlet是什么?可以是任意servlet吗? 如果存在Application子类,并且已经定义了一个servlet,该servlet的servlet初始化参数为: 同样,这里的“ servlet”是什么? 如果存在不由现有Servlet处理的Applicati
我正试图在Tomcat 7.0.34.0上使用Servlet3.0应用程序类开发一个RESTful webapp,但似乎没有任何工作。我对以前的应用程序使用Jersey ServletContainer方法并在web.xml中声明所有REST服务没有任何问题。 我的当前应用程序子类: 和web服务: 当我尝试部署应用程序时,Tomcat告诉我上下文已重新加载: web应用程序本身已经部署(我可以访
这是MyResource: 和我的web.xml: 在客户端,我使用这个url:http://localhost:8080/[projectname]/webapi/helloworld 谢了!
问题内容: 我使用AppFuse创建了一个基本的应用程序外壳,并按照AppFuse教程使用Jax- RS创建了一个简单的RESTful服务。那很好。调用时,将Person对象的集合作为Json格式的字符串返回,并带有正确的数据。 我现在想从Appfuse提供的RESTful服务中访问和对象(以使用需要这些对象的另一个库)。 我 _认为_应该可以通过添加@Context注释来实现,但是,如果我添加@
经过谷歌搜索,有人说可能是webshpere服务器已经包含了ASM。因此,我从app.war web-INF/lib中删除了asm.jar。但它仍然存在错误。