从现有REST API

时间:2016-11-17 17:23:20

标签: java jax-rs swagger jersey-2.0 swagger-ui

鉴于现有的JAX-RS注释API接受&返回json,带有jackson-annotated类型,有没有办法可以生成一些YAML Swagger文档?我的计划B是编写一些使用反射来查找REST注释类型的代码,制作他们的参数的散列图。返回,然后抓取这些类以获取Jackson注释,并以这种方式生成文档。

我更愿意使用已经存在的解决方案来编写一次性的东西。我发现这个Swagger模块声称它可以解析Jackson配置(https://github.com/FasterXML/jackson-module-swagger),但我不太了解Swagger了解哪些模块以及我是否可以使用它来从现有代码生成Swagger。

2 个答案:

答案 0 :(得分:1)

您可能想要查看此项目:https://github.com/sdaschner/jaxrs-analyzer

它可以为JAX-RS自动生成Swagger文档。据我所知,杰克逊没有考虑具体的注释。

答案 1 :(得分:1)

Swagger将为带注释的方法生成交互式文档。您不需要编写自己的抓取工具。添加lib:

    <dependency>
        <groupId>com.wordnik</groupId>
        <artifactId>swagger-jaxrs_2.10</artifactId>
        <version>1.3.13</version>
        <scope>compile</scope>
    </dependency>

配置它:

private void configureSwagger(String swaggerBasePath){
    SwaggerConfig swaggerConfig = new SwaggerConfig();
    ConfigFactory.setConfig(swaggerConfig);
    swaggerConfig.setSwaggerVersion("Version");
    swaggerConfig.setApiVersion("1"); 
    swaggerConfig.setBasePath("http://example.com:8080/your-service");
    ScannerFactory.setScanner(new DefaultJaxrsScanner());
    ClassReaders.setReader(new DefaultJaxrsApiReader());
}

注释您的服务和方法:

@Path("/v1/items")
@Api(value = "/v1/items", description = "API description for Swagger")
public class ItemsService {

      @GET
      @Path("/list")
      @ApiOperation(value = "Get items list", notes = "Returns items list.")
      @Consumes(MediaType.APPLICATION_JSON)
      @Produces(MediaType.APPLICATION_JSON)
      public ItemsResponse getItems(){
          ...
      }

}

添加Swagger UI文件夹并修改其index.html源以加载REST服务文档URL。