我想为Jersey REST API文档设置Swagger,所以我在github上遵循了这个指南:https://github.com/wordnik/swagger-core/wiki/Java-JAXRS-Quickstart
我在Pom.xml中添加了以下内容:
<dependency>
<groupId>com.wordnik</groupId>
<artifactId>swagger-jersey-jaxrs_2.10</artifactId>
<version>1.3.0</version>
</dependency>
保存此文件后,maven下载了以下似乎正确的jar:
然后我可以使用@ Api,@ ApiOperation等创建一些注释。但配置尚未完成。
在我的Web.xml中,我需要指定一个额外的Servlet“JerseyJaxrsConfig”:
<servlet>
<display-name>Rest Servlet</display-name>
<servlet-name>RestServlet</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>com.myprojectapp.rest;com.wordnik.swagger.jersey.listing</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
<param- value>com.sun.jersey.api.container.filter.LoggingFilter;com.myprojectapp.authentication.SecurityFilter</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>JerseyJaxrsConfig</servlet-name>
<servlet-class>com.wordnik.swagger.jersey.config.JerseyJaxrsConfig</servlet-class>
<init-param>
<param-name>api.version</param-name>
<param-value>1.0.0</param-value>
</init-param>
<init-param>
<param-name>swagger.api.basepath</param-name>
<param-value>http://localhost:8002/MyProjectApp/api</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
如果我启动Tomcat 7,我会收到以下ClassNotFoundException:
严重:Servlet / MyProjectApp抛出了load()异常 java.lang.ClassNotFoundException: com.wordnik.swagger.jersey.config.JerseyJaxrsConfig 在org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714) 在org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559) at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:527) 在org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:509) at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:137) 在org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1144) 在org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1088) 在org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5176) 在org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5460) 在org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 在org.apache.catalina.core.ContainerBase $ StartChild.call(ContainerBase.java:1559) 在org.apache.catalina.core.ContainerBase $ StartChild.call(ContainerBase.java:1549) at java.util.concurrent.FutureTask $ Sync.innerRun(Unknown Source) at java.util.concurrent.FutureTask.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor $ Worker.run(Unknown Source) 在java.lang.Thread.run(未知来源)
奇怪的是,servlet类“JerseyJaxrsConfig”已经存在于最近下载的三个jar文件之一中。因此,当我输入com.wordnik.swagger.jersey.config时,Eclipse可以使用此类提出建议。但Tomcat无法在启动时找到它。为什么?如果我在Web.xml中注释掉servlet“JerseyJaxrsConfig”,那么Tomcat运行时没有错误。我尝试了一些事情,例如禁用我的Quartz Job,它以Tomcat开头,尝试使用其他的swagger版本或在Web.xml中添加其他设置但没有成功。
我的环境如下 - 带Maven的Eclipse - 泽西岛1.81.1 - Java EE 7 - Tomcat 7 - Swagger 1.3
感谢您的帮助。
答案 0 :(得分:0)
您可以在运行Tomcat时添加没有编译时错误但运行时错误的注释的原因可能是因为jar存在于项目类路径中,但在WebContent / WEB-INF / lib目录中缺少
将罐子复制到该目录,它可能会起作用。祝好运! :)
答案 1 :(得分:0)
确保添加这些库:
swagger-annotations-1.3.10.jar
swagger-core_2.10-1.3.10.jar
swagger-jaxrs_2.10-1.3.10.jar
swagger-jersey2-jaxrs_2.10-1.3.10.jar
你应该拥有指定版本的所有四个罐子。