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

新手上路,请多包涵

我有大约 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,我将响应作为控制器中的 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 的模型。

原文由 as3rdaccount 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.8k
1 个回答

我正在使用 swagger 2 ,下面为我解决了这个问题。

@ApiResponse@ApiOperation 中删除“ 响应”属性。然后 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)

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

原文由 Supun Wijerathne 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏