我试图遵循文档,将Swagger集成到现有的API中。这是教程:https://github.com/swagger-api/swagger-core/wiki/wiki/swagger-core-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>
我的上下文根是"/"。因此,现在当我访问http://localhost:7001//itemapi/swagger.json我会有404错误。
有关信息,这是在WebLogic上部署的JAX-RS球衣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中添加摘要吗?该类保存在一个称为"测试"的单独软件包中。
首先,为什么我会遇到404错误?我错过了什么?其次,如果这是一个问题,我该如何保存并运行此自定义应用程序类??
事先感谢您的所有帮助!
对于任何有兴趣的人,我都知道了。
我没有在Web.xml中的软件包扫描servlet中包含一个重要的软件包,因此API甚至无法正常运行。
我恢复了所有更改,决定运行API。通过日志,我看到了哪些软件包正在扫描,因为ServletContainer Servlet是空白的。然后,我像以前一样再次对其进行了编辑,但是这次牢记上次扫描的包装。
现在相同的链接起作用。而且不需要应用程序子类。