【问题标题】:Tomcat - Jersey - Swagger.Json not getting generatedTomcat - Jersey - Swagger.Json 未生成
【发布时间】:2016-06-21 02:23:40
【问题描述】:

我想为使用 Jersey 开发的 ReST 服务生成 Swagger API 文档。

我已经阅读了 Swagger API 文档并按照文档进行了部署。

但是当我访问 URL (http://localhost:8080/MySwagger/swagger.json) 时,我得到以下输出。

{

"swagger" : "2.0",

  "info" : 
   {

    "version" : "1.0.2",

    "title" : "UUK"
  },

  "host" : "localhost:8080",

  "basePath" : "/MySwagger",

  "schemes" : [ "http" ]

}

以上不包含我们开发的API

我已经尝试了文档中提到的各种选项,但结果都是一样的。

我已经在 tomcat 7.0.68 中部署了应用程序。

我的 Java 版本是 7

我已经使用maven下载了依赖的jars并手动将jars复制到/WEB-INF/lib目录

Maven 脚本

mvn dependency:get -DgroupId=io.swagger -DartifactId=swagger-jersey2-jaxrs -Dversion=1.5.7

我的 web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app>


    <servlet>
        <servlet-name>jersey</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>

        <init-param>
            <param-name>jersey.config.server.provider.classnames</param-name>
            <param-value>
                io.swagger.jaxrs.listing.ApiListingResource,
                io.swagger.jaxrs.listing.SwaggerSerializers,
                test.EventReceiver
            </param-value>
        </init-param>       

        <load-on-startup>1</load-on-startup>

    </servlet>

    <servlet>
        <servlet-name>SwaggerBootstrap</servlet-name>
        <servlet-class>test.bootstrap.SwaggerApplication</servlet-class>
        <load-on-startup>2</load-on-startup>
    </servlet>  

    <servlet-mapping>
        <servlet-name>jersey</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

</web-app>

我的自定义 Servlet 类

import io.swagger.jaxrs.config.BeanConfig;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

public class SwaggerApplication extends HttpServlet
{
    private static final long serialVersionUID = 1L;

    @Override
    public void init(ServletConfig config) throws ServletException 
    {
    super.init(config);

    BeanConfig beanConfig = new BeanConfig();
    beanConfig.setVersion("1.0.2");
    beanConfig.setSchemes(new String[]{"http"});
    beanConfig.setHost("localhost:8080");
    beanConfig.setBasePath(config.getServletContext().getContextPath());
    beanConfig.setTitle("UUK");
    beanConfig.setResourcePackage("io.swagger.resources");
    beanConfig.setScan(true);
    beanConfig.setPrettyPrint(true);
    }
}

我的 API 类

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;

import javax.ws.rs.Consumes;
import javax.ws.rs.HeaderParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path(value="/v1/")
@Api(value="inboundtransaction" ,description = "Receive Inbound transaction", position = 1, protocols = "http")

public class EventReceiver 
{
    @POST
    @Path(value="/inboundtransaction")
    @Produces({ MediaType.APPLICATION_JSON })
    @Consumes({ MediaType.APPLICATION_JSON })

    @ApiOperation(value="Receiving Inbound transaction from X", notes = "Must Contain ID",httpMethod = "POST",response=String.class)
    @ApiResponses(value = 
    { 
              @ApiResponse(code = 201, message = "Received request and process later", response=String.class),
              @ApiResponse(code = 400, message = "Server Busy. Please re-send later", response=String.class) 
    }
    )

    public String inboundtransaction(
            @ApiParam(value = "Pass mandatory values to create EdiAddress",required = true) String data
            ) 
    {
        return "Success";
    }
}

请让我知道当前设置中的问题。

问候

乌达亚

【问题讨论】:

    标签: swagger jersey-2.0 swagger-ui


    【解决方案1】:

    您需要包含您的包,它是一个以逗号分隔的包的字符串。

    beanConfig.setResourcePackage("io.swagger.resources, , ");

    【讨论】: