英文:
How to set example values in @ApiModelProperty in such a way that different values are returned for HTTP status codes?
问题
I have a class called ErrorDetails
which is a template for all error responses.
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;
}
}
Now, in order to display example values, we use swagger annotations: @ApiModel
& @ApiModelProperty
. But I want to display different samples for respective error responses.
For example, code 400
, should have a sample message: Page not found
, and for code 500
will have a different sample message. How do I achieve that? I can only specify one example value for a specific case. Is there a way to programmatically handle sample values? I have explored the below ways:
-
Having a generic response set at global docket config:
Problem here is I might have a different error response for code 404 alone. For example: "Employee not found", "Store not found" etc. This is impossible to achieve if I have global configuration. -
Using
@Example
with@ApiResponse
:
Problem here is this is not working, and springfox dev team suggests using@ApiModelProperty
instead of this approach.
@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 a Runtime exception\", \"code\": \"500\"}", mediaType = "application/json")))
The above code is not working, and I get the below output:
Can someone suggest me how to fix the above issue? or how to set values dynamically in @ApiModelProperty
?
英文:
I have a class called ErrorDetails
which is a template for all error responses.
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;
}
}
Now, in order to display example values, we use swagger annotations: @ApiModel
& @ApiModelProperty
. But I want to display different samples for respective error responses.
For example, code 400
, should have sample message: Page not found
and for code 500
will ahve different sample message. How do I achieve that? I can only specify one example value for a specific case. Is there a way to programmatically handle sample values? I have explored below ways:
- Having a generic response set at global docket config:
Problem here is I might have different error response for code 404 alone. For example : "Employee not found", "Store not found" etc. This is impossible to achieve if I have global configuration. - Using
@Example
with@ApiResponse
:
Problem here is this is not working & springfox dev team suggest to use@ApiModelProperty
instead of this approach.
@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")))
The above code is not working and I get the below output:
Can someone suggest me how to fix the above issue ? or how to set values dynamically in @ApiModelProperty
?
答案1
得分: 0
如果您只需要显示附加到哪个状态代码的消息,那么这是一个示例:
@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(...){
...
}
英文:
If you need to only display what message is attached to which status code, then here's example
@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(...){
...
}
答案2
得分: 0
显然,我必须创建不同的类来代表这些错误,并从 @ApiResponse
中链接它们。没有办法使用单个模型类为所有不同的HTTP状态抛出不同的示例响应。
英文:
Apparently, I had to create different classes representing each one of these errors and link them from @ApiResponse
. There's no way that I can have one single model class that can throw varying sample responses for all different HTTP status.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论