我尝试按照文档将swagger集成到现有的API中。这是教程:https://github.com/swagger-api/swagger-core/wiki/Swagger-Core-Jersey-1.X-Project-Setup-1.5
我在pom.xml中添加了maven依赖 -
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-jersey-jaxrs</artifactId>
<version>1.5.0</version>
<exclusions>
<exclusion>
<artifactId>jersey-server</artifactId>
<groupId>com.sun.jersey</groupId>
</exclusion>
<exclusion>
<artifactId>jersey-multipart</artifactId>
<groupId>com.sun.jersey.contribs</groupId>
</exclusion>
</exclusions>
</dependency>
不确定是否应该添加排除项。 然后对于包扫描,我添加了以下内容。球衣servletContainer已经存在。我刚刚为它添加了初始化参数。
<servlet>
<servlet-name>JAX-RS Servlet</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>
io.swagger.jaxrs.json;
io.swagger.jaxrs.listing;
jp.co.mycompany.rest.api.resource
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>JAX-RS Servlet</servlet-name>
<url-pattern>/itemapi/*</url-pattern>
</servlet-mapping>
然后我将以下servlet添加到web.xml,这应该是最后一步。
<servlet>
<servlet-name>Jersey2Config</servlet-name>
<servlet-class>io.swagger.jaxrs.config.DefaultJaxrsConfig</servlet-class>
<init-param>
<param-name>api.version</param-name>
<param-value>0.0.1-SNAPSHOT</param-value>
</init-param>
<init-param>
<param-name>swagger.api.basepath</param-name>
<param-value>http://localhost:7001//itemapi/</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
我的上下文根是&#34; /&#34;。所以现在当我去http://localhost:7001//itemapi/swagger.json时,我收到404错误。
有关信息,这是在WebLogic上部署的JAX-RS Jersey 1.9 REST API。 我研究了一下,有些人说使用自定义应用程序而不是包扫描servlet。我在下面创建了这个类(也许这里有些错误):
package test;
import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("/itemapi")
public class MyApplication extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> classes = new HashSet<Class<?>>();
classes.add(jp.co.mycompany.api.resource.EventItemResource.class);
classes.add(jp.co.mycompany.api.resource.EventItemResourceBase.class);
classes.add(jp.co.mycompany.api.resource.EventItemResponseJsonMessageBodyWriter.class);
classes.add(jp.co.mycompany.api.resource.JsonMessageBodyWriter.class);
classes.add(jp.co.mycompany.api.resource.JsonMessageBodyWriterBase.class);
classes.add(jp.co.mycompany.api.resource.NormalItemResourceBase.class);
classes.add(jp.co.mycompany.api.resource.NormalItemResourceCommon.class);
classes.add(jp.co.mycompany.api.resource.NormalItemResultJsonMessageBodyWriter.class);
classes.add(jp.co.mycompany.api.resource.ValidatingEventItemXmlRequest.class);
classes.add(jp.co.mycompany.api.resource.ValidatingNormalItemXmlRequest.class);
classes.add(jp.co.mycompany.api.resource.ValidatingXmlRequest.class);
classes.add(io.swagger.jaxrs.listing.ApiListingResource.class);
classes.add(io.swagger.jaxrs.listing.SwaggerSerializers.class);
return classes;
}
}
问题是我不知道如何确保这个课程正在运行。我是否必须在web.xml中添加一个片段。该课程保存在名为&#39; test&#39;的单独包中。
首先,为什么我收到404错误?我错过了什么?其次,如果这是一个问题,我该如何保存和运行这个自定义应用程序类?
提前感谢所有帮助!
答案 0 :(得分:0)
对于任何有兴趣的人,我明白了。
我没有在web.xml中的包扫描servlet中包含一个重要的包,因此api甚至没有正常运行。
我恢复了所有的更改并决定运行api。通过日志,我看到了正在扫描的软件包,因为servletcontainer servlet是空白的。然后我像以前一样再次编辑它,但这一次记住上次扫描的包。
同一链接现在有效。并且不需要应用程序子类。