如何为Swagger API响应指定泛型类

问题描述 投票:9回答:2

我有大约40个具有类似基本响应结构的API,如下所示:

{
    "lastAccessed": "2015-30-08:14:21:45T",
    "createdOn": "2015-30-07:09:04:10T",
    "lastModified": "2015-30-08:14:21:45T",
    "isReadOnly": "false",
    "usersAllowed" : ["Tim", "Matt", "Christine"];
    "noOfEntries": 1,
    "object": [
        "ObjectA": {
             //here object A has its own model
         }
    ]
}

所以我有一个基类响应类,它采用类型T的泛型,如下所示:

public class Response<T> {
    @ApiModelProperty(value="Last time accessed")
    private String lastAccessed;
    @ApiModelProperty(value="Time when Created ")
    private String createdOn;
    private String lastModified;
    @ApiModelProperty(value="Created on")
    private boolean isReadOnly;
    @ApiModelProperty(value="Users that has access to the object.")
    private List<String> usersAllowed;
    private int noOfEntries;
    private T object;

    //getters and setters
}

因此,对于API A,它返回具有自己字段的Object类型,我返回Response作为控制器中的API响应:

  public class A {
    @ApiModelProperty(value="Name")
    private String name;
    @ApiModelProperty(value="OID")
    private String id;    
    //getters and setters
}    

在控制器中:Response data = new Response(); ResponseEntity response = new ResponseEntity <>(data,HttpStatus.OK);

有没有办法招摇我可以递归地指定响应对象的模型?例如,我可以使用注释@ApiOperation(response = Response.class)但是没有A的模型。

java generics swagger httpresponse
2个回答
7
投票

我知道这是一篇旧帖子,但对于其他寻找答案的人来说:

这可以针对ListSetMap响应对象完成,但任何其他具有泛型类型的类类都将被忽略。如果您使用这三个中的任何一个,那么您可以在responseContainer字段中指定它们,并在response字段中指定推断类型。

@ApiResponse(code = 200, responseContainer="List", respone=java.lang.String.class)

5
投票

我正在使用招摇2,以下为我解决了这个问题。

@ApiResponse@ApiOperation删除'response'属性。然后,swagger会自动为方法存根生成200 OK的响应类(无论响应类中是否有泛型)。

@ApiOperation(value = "what your operation does")

@ApiResponses(value = { @ApiResponse(code = 200, message = "Success message") })

更新:你可以做这个简单的工作。只是说你想输出Response<MyClass>作为响应返回类型。你可以做,

  • 在控制器类中,指定一个像这样的空私有类 private MyResponseClass extends Response<MyClass>{}
  • 对于swagger规范,请指定如下, @ApiResponse(code = 200, respone=MyResponseClass.class)

请记住,目前,招摇不支持泛型。以上两个只是解决方法。

© www.soinside.com 2019 - 2024. All rights reserved.