如何以为 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 将有不同的示例消息。我该如何实现?我只能为特定案例指定一个示例值。有没有办法以编程方式处理样本值?我探索了以下方法:

  1. 在全局摘要配置中设置通用响应: 这里的问题是我可能单独对代码 404 有不同的错误响应。例如:“找不到员工”,“找不到商店”等。如果我有全局配置,这是不可能实现的。
  2. @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 状态抛出不同的样本响应。