我有大约 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 许可协议
我正在使用 swagger 2 ,下面为我解决了这个问题。
从
@ApiResponse
和@ApiOperation
中删除“ 响应”属性。然后 swagger 会从方法存根自动为您生成 200 OK 的响应类(无论响应类中是否有泛型)。更新:您可以解决这个简单的问题。只是说你想输出
Response<MyClass>
作为响应返回类型。你可以做,private MyResponseClass extends Response<MyClass>{}
@ApiResponse(code = 200, respone=MyResponseClass.class)
请记住,目前 swagger 不支持泛型。以上两个只是解决方法。