我有Swagger代码注释用于文档目的,类似于以下内容:
@RequestMapping(value = "/campaigns/{campaignUuid}",
method = RequestMethod.GET)
@ApiOperation(value = "...",
httpMethod = "GET",
notes = "...",
response = XCampaign.class,
tags = { "Campaigns" })
@ApiResponses(value = { @ApiResponse(code = 200,
message = "OK",
response = XCampaign.class),
@ApiResponse(code = 401,
message = "Unauthorized",
response = HttpErrorResponse.class),
@ApiResponse(code = 400,
message = "Bad Request",
response = HttpErrorResponse.class),
@ApiResponse(code = 404,
message = "Not Found",
response = HttpErrorResponse.class),
@ApiResponse(code = 500,
message = "Internal Server Error",
response = HttpErrorResponse.class) })
基本上,我希望在Swagger中记录以下响应:
200:
{
'campaign': {
...
},
links: {
...
}
}
在4xx或5xx上:
{
error: {
...
}
}
我遇到的问题是“嵌套”组件。如果我将类本身列为Response
类,则显然不会将其作为嵌套JSON返回。但是,如果我尝试嵌套它,如下所示:
public class HttpErrorResponse {
private ErrorResponse error;
private class ErrorResponse {
public final String code;
public final String message;
public ErrorResponse(String code, String message) {
this.code = code;
this.message = message;
}
}
}
然后Swagger Docs显示一个空的Object:
HttpErrorResponse {}
我还看了一下Spring HATEOAS,并认为我将能够使用它实现2xx响应类型,如何通过嵌套类型实现我想要的一般性?
答案 0 :(得分:0)
将这样的内容添加到Docket
.alternateTypeRules(
newRule(typeResolver.resolve(DeferredResult.class,
typeResolver.resolve(ResponseEntity.class, WildcardType.class)),
typeResolver.resolve(WildcardType.class)))
一般用DeferredResult<ResponseEntity<T>>
代替T
,有关更多信息,请参阅有关如何配置Swagger here的有用指南。
还导入所有必需的lib,包括一个很难理解的:
import static springfox.documentation.schema.AlternateTypeRules.*;