【发布时间】:2015-10-01 19:25:27
【问题描述】:
我正在尝试将 Swagger 添加到使用 Jersey 1.19 的现有应用程序中。为了将 Swagger 添加到应用程序中,我一直遵循本指南:https://github.com/swagger-api/swagger-core/wiki/Swagger-Core-Jersey-1.X-Project-Setup-1.5。
当我在 Apache Tomcat 上部署应用程序时,我收到以下错误:
SEVERE: Conflicting URI templates. The URI template / for root resource class io.swagger.jaxrs.listing.ApiListingResource and the URI template / transform to the same regular expression (/.*)?
奇怪的是,我的 Jersey servlet 没有部署在根上下文中,而是部署在 /api/* 上下文中,如 web.xml 文件所示:
<servlet>
<servlet-name>MyApp Service</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>app.MyApplication</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>MyApp Service</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
我的 MyApplication 类定义如下:
public class MyApplication extends Application {
private final Set<Object> singletons = new HashSet<Object>();
private final Set<Class<?>> classes = new HashSet<Class<?>>();
public MyApplication() {
MyResource resource= new MyResource();
singletons.addAll(Arrays.asList(resource));
BeanConfig beanConfig = new BeanConfig();
beanConfig.setBasePath("/api");
beanConfig.setResourcePackage(getClass().getPackage().getName());
beanConfig.setTitle("REST API");
beanConfig.setVersion("1.0.0");
beanConfig.setScan(true);
classes.add(io.swagger.jaxrs.listing.ApiListingResource.class);
classes.add(io.swagger.jaxrs.listing.SwaggerSerializers.class);
}
@Override
public Set<Class<?>> getClasses() {
return classes;
}
@Override
public Set<Object> getSingletons() {
return singletons;
}}
我尝试了其他配置,比如在web.xml文件中定义Swagger servlet而不是使用BeanConfig,但是还是出现同样的错误。我已经让 Swagger 在另一个使用 Jersey 2 的项目上以这种方式工作,但不幸的是,当前项目必须保留在 Jersey 1.19 上。下面是 pom.xml 文件中定义的 Swagger 依赖:
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-jersey-jaxrs</artifactId>
<version>1.5.0</version>
</dependency>
任何帮助将不胜感激。
【问题讨论】: