Swagger数据类型不生成文档

时间:2017-06-27 16:10:35

标签: java swagger microservices spark-java

我在Swagger中有以下代码,

@Path("/v1")
    @ApiOperation(value = "POST - Some Value", nickname = "post-funtion", consumes = "application/json", produces = "text/html; charset=UTF-8", tags = {
            "Some Controller" })
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", paramType = "header", dataType = "string", format = "JWT", required = false, value = "A User Service JWT"),
            @ApiImplicitParam(name = "Request", value = "Request Object", paramType = "body", dataType = "org.pkg.SomeRequest", required = true) })
    @ApiResponses({
            @ApiResponse(code = 200, message = "Value Added", response = SomeResponse.class) })
private Object retrieveByName(Request request, Response response)
{
    return new RetrieveByNameRqstHandler(catalogService, request, response).handle();
}

代码应该自动生成默认的json请求,具体取决于数据类型,在这种情况下是"org.pkg.SomeRequest",但没有生成任何内容。相反,如果我更改" org.pkg.SomeRequest"使用"org.pkg.SomeResponse",为此生成了默认的JSON。请有人帮帮我吗?

考虑两个类SomeRequest,SomeResponse具有相同的代码。 这是我在dataType中使用"org.pkg.SomeRequest"的图像 This is the image where I use <code>"org.pkg.SomeRequest"</code> in the dataType This is the image where I use <code>"org.pkg.SomeResponse"</code> in the dataType

这是我在dataType

中使用"org.pkg.SomeResponse"的图片

2 个答案:

答案 0 :(得分:2)

根据Swagger核心项目中的这个GitHub issue,如果你添加注释@ApiImplicitParam应解决你的问题。

@ApiImplicitParams({
    @ApiImplicitParam(
        required = true,
        dataType = "com.example.SomeObjectDto",
        paramType = "body"
    )
})

但通常如果您只是在方法签名上添加该类,它就会起作用。

private Object retrieveByName(SomeObjectDto someObjectDto) {
    someCode();
}

SomeObjectDto类也应包含&#34; get&#34;变量的方法,如。

class SomeObjectDto {
    private String info;

    getInfo(){
        return info;
    }
}

将生成以下JSon。

  

{info:&#34; string&#34; }

答案 1 :(得分:0)

ApiImplicitParam可以将参数映射到正确的类型,但是该类型必须通过摇晃来检测,因此必须是有效的引用。 我可以使之起作用的唯一方法是使用additionalModels方法。

spring-boot中的示例:
配置招摇

import springfox.documentation.spring.web.plugins.Docket;
import com.fasterxml.classmate.TypeResolver;
...

@Bean
public Docket api(TypeResolver typeResolver) {
  return new Docket(DocumentationType.SWAGGER_2)
    .groupName("your-group-rest-api")
    .select()
    .apis(RequestHandlerSelectors.basePackage("your.package"))
    .paths(PathSelectors.any())
    .build()
    .additionalModels(typeResolver.resolve(YourModel.class))
    .apiInfo(apiInfo());
}

控制器

@ApiOperation...
@ApiImplicitParams(
  @ApiImplicitParam(dataType = "YourModel", name = "requestJson", paramType = "body"))
@ApiResponses...
@RequestMapping...
public void yourMethod(@RequestBody String requestJson,...)

当然,您可以为请求提供一个InputStream参数,并将其映射到您的模型。