【问题标题】:swagger.json is not generated in Jersey + Spring + Tomcat environmentJersey + Spring + Tomcat 环境下不生成 swagger.json
【发布时间】:2016-05-24 15:57:45
【问题描述】:

我已经浏览了 Swagger 文档并根据文档进行了配置。

当我请求http://localhost:8080/rest/api-docs 页面时,Swagger 正确显示所有信息,但它不会生成 swagger.json,因此http://localhost:8080/rest/swagger.json 返回 404。

我的端点http://localhost:8080/rest/test 也可以正常工作。

这是我的web.xml

<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<servlet>
    <servlet-name>jersey</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.JerseyConfig</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>jersey</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

<!-- Swagger Config -->
<servlet>
    <servlet-name>Jersey2Config</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:8080/rest/</param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
</servlet>

JerseyConfig类:

public class JerseyConfig extends ResourceConfig {
    public JerseyConfig() {
        register(Test.class);
        //....
        // Swagger
        register(com.wordnik.swagger.jersey.listing.ApiListingResource.class);
        register(com.wordnik.swagger.jersey.listing.ApiListingResourceJSON.class);
        register(com.wordnik.swagger.jersey.listing.JerseyApiDeclarationProvider.class);
        register(com.wordnik.swagger.jersey.listing.JerseyResourceListingProvider.class);
    }
}

Test.class 是一个简单的端点,用 Swagger @Api 注释。

@Path("/test")
@Api(value = "/test", description = "tttttt")
public class TestResource {

   @GET
   @ApiOperation(value = "Checks server")
   @ApiResponses(@ApiResponse(code = 200, message = "Server is available"))
   public Response check() {
       return Response.ok().build();
   }
}

应用部署在 Tomcat 中。


根据 Jersey ResourceModel,Swagger 创建的唯一端点是:

   GET     /api-docs
   GET     /api-docs/{route: .+}

【问题讨论】:

    标签: java api tomcat jersey swagger


    【解决方案1】:

    swagger.json 位置是 swagger 定义的推荐位置,但它不是 唯一 可以生成它的位置。请尝试将 api-docs 位置放在您的 swagger-ui 中,它应该可以正常工作。

    【讨论】:

      猜你喜欢
      • 2016-06-21
      • 2018-04-10
      • 2010-10-20
      • 2023-03-15
      • 2015-08-06
      • 1970-01-01
      • 1970-01-01
      • 2011-12-15
      • 1970-01-01
      相关资源
      最近更新 更多