问题描述
我有一个名为ErrorDetails
的类,它是所有错误响应的模板。
public class ErrorDetails {
private Date timestamp;
private String message;
private String details;
private int code;
public ErrorDetails(Date timestamp,String message,String details,int code) {
this.timestamp = timestamp;
this.message = message;
this.details = details;
this.code = code;
}
}
现在,为了显示示例值,我们使用招摇注解:@ApiModel
和@ApiModelProperty
。但是我想针对各个错误响应显示不同的样本。
例如,code 400
应具有示例消息:Page not found
,对于code 500
,将具有不同的示例消息。我该如何实现?我只能为特定情况指定一个示例值。有没有办法以编程方式处理样本值?我探索了以下方式:
- 在全局摘要配置中设置了通用响应: 这里的问题是我可能对单独的代码404会有不同的错误响应。例如:“找不到员工”,“找不到存储”等。如果我具有全局配置,则无法实现。
- 将
@Example
与@ApiResponse
一起使用: 这里的问题是这无法正常工作,并且springfox开发团队建议使用@ApiModelProperty
代替这种方法。
@ApiResponse(code = 500,message = "Internal server error",response = ErrorDetails.class,examples = @Example(value = @ExampleProperty(value = "{\"timestamp\": \"1598947603319\",\"message\":\"Operation failed\",\"details\":\"Operation failed due to Runtime exception\",\"code\": \"500\"}",mediaType = "application/json")))
有人可以建议我如何解决上述问题?或如何在@ApiModelProperty
中动态设置值?
解决方法
如果您只需要显示在什么状态代码上附加了什么消息,那么这里是示例
@PostMapping(value = "/api/posts")
@ApiOperation(value = "Create post.")
@ApiResponses({
@ApiResponse(code = 200,message = "Post created successfully",response = PostResponse.class),@ApiResponse(code = 404,message = "Blog does not exist",response = ApiError.class),@ApiResponse(code = 409,message = "Post already exists",@ApiResponse(code = 422,message = "Block content full",response = ApiError.class)
})
PostResponse createPost(...){
...
}
,
显然,我必须创建代表这些错误中的每一个的不同类,并从@ApiResponse
进行链接。我不可能只有一个模型类可以针对所有不同的HTTP状态抛出不同的样本响应。