如何以为 HTTP 状态代码返回不同值的方式在 @ApiModelProperty 中设置示例值?
How to set example values in @ApiModelProperty in such a way that different values are returned for HTTP status codes?
我有一个名为 ErrorDetails
的 class,它是所有错误响应的模板。
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;
}
}
现在,为了显示示例值,我们使用 swagger 注释:@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", response = ApiError.class),
@ApiResponse(code = 422, message = "Block content full", response = ApiError.class)
})
PostResponse createPost(...){
...
}
显然,我必须创建不同的 classes 来代表这些错误中的每一个,并且 link 它们来自 @ApiResponse
。我不可能只有一个模型 class 可以针对所有不同的 HTTP 状态抛出不同的样本响应。
我有一个名为 ErrorDetails
的 class,它是所有错误响应的模板。
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;
}
}
现在,为了显示示例值,我们使用 swagger 注释:@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", response = ApiError.class),
@ApiResponse(code = 422, message = "Block content full", response = ApiError.class)
})
PostResponse createPost(...){
...
}
显然,我必须创建不同的 classes 来代表这些错误中的每一个,并且 link 它们来自 @ApiResponse
。我不可能只有一个模型 class 可以针对所有不同的 HTTP 状态抛出不同的样本响应。