Collectives™ on Stack Overflow
Find centralized, trusted content and collaborate around the technologies you use most.
Learn more about Collectives
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
Learn more about Teams
I would like to add an example with Swagger in my method, I have tried a few things, but they didn't work.
I have my Interface, where I define the method:
@Api(value = "test API")
@RequestMapping("/api/v1/product")
public interface TestController {
@ApiOperation(
value = "Service that return a Product",
notes = "This service returns a Product by the ID",
nickname = "getProductById",
response = ProductResponse.class)
@ApiResponses(value = {
@ApiResponse(code = 200, message = "The request has succeeded.", response = ProductResponse.class),
@ApiResponse(code = 500, message = "Internal server error.", response = ProductResponse.class) })
@GetMapping(
value = "/productById",
produces = { "application/json" }
ResponseEntity<ProductResponse> getProductById(@RequestParam(value = "productId", required = true) String productId);
The ProductResponse class is the following:
@Getter
@Setter
@AllArgsConstructor
public class ProductResponse {
private Product product;
private CustomException customException;
The Product class is the following:
@Getter
@Setter
@AllArgsConstructor
public class Product {
@JsonProperty("id")
private String id;
@JsonProperty("productName")
private String productName;
@JsonProperty("productDescription")
private String productDescription;
@JsonProperty("unitPrice")
private Double unitPrice;
And the CustomException class is the following:
@Getter
public class CustomException {
private final String message;
private final String errorCode;
private final String errorType;
private final Exception exceptionDetail;
public CustomException(String message, String errorCode, String errorType, Exception exceptionDetail) {
this.message = message;
this.errorCode = errorCode;
this.errorType = errorType;
this.exceptionDetail = exceptionDetail;
When the response is 200, the response is like:
"product": {
"id": "12345",
"productName": "Product name",
"productDescription": "This is a description",
"unitPrice": 3.25
"customException": null
But when the response is 500, the response is like:
"product": "null,",
"customException": {
"message": "/ by zero",
"errorCode": "500",
"errorType": "Internal server error",
"exceptionDetail": null,
"cause": null,
"stackTrace": [
"classLoaderName": "app",
"moduleName": null,
"moduleVersion": null,
"methodName": "getProductById",
"fileName": "TestControllerImpl.java",
"lineNumber": 33,
"className": "com.myproject.testmicroservice.controller.impl.TestControllerImpl",
"nativeMethod": false
How can I add a custom example in the @ApiResponse annotation?
You are probably missing the @Operation
annotation, where inside you put the @ApiResponse
.
Example:
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.Operation;
@Operation(responses = {
@ApiResponse(responseCode = "200", content = @Content(examples = {
@ExampleObject(name = "getUserAttribute",
summary = "Retrieves a User's attributes.",
description = "Retrieves a User's attributes.",
value = "[{\"value\": [\"area1\", \"area2\", \"area3\"], \"key\":\"GENERAL_AREAS\"}, {\"value\":\"933933933\", \"key\":\"FONyE\"}]")
}, mediaType = MediaType.APPLICATION_JSON_VALUE))})
public ResponseEntity<List<UserPreferenceDto>> getUserPreferenceByCode(
@Pattern(regexp = "\\w+") @PathVariable String userCode, @Parameter(hidden = true) Pageable pageable) {
Good evening hope you are doing well. In the case you are describing, I would do something like this
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "Found the book",
content = { @Content(mediaType = "application/json",
schema = @Schema(implementation = Book.class)) }),
@ApiResponse(responseCode = "400", description = "Invalid id supplied",
content = @Content),
the approach described is explained here. I think that paragraph 9. Generate Documentation Using @Operation and @ApiResponses is of particular interest in your case. I hope this helps, Have a good night
You can try something like this. In your controller you already have @ApiResponses
annotation. What you need to do is add @ApiModel
to your Product
class and then add
@ApiModelProperty(notes = "Your comments", required = true, example = "example value")
to members of your Product
class i.e. ProductResponse
and CustomException
. One thing that you will need to verify is whether @ApiModelProperty
can be set on custom objects like ProductResponse
and CustomException
. If not you will need to set @ApiModelProperty
1 level deep.
As shown in article, the examples are auto populated from model property to response.
PS: As of now, I do not have setup of a swagger project so can only help you theoretically.
may be this late answer but incase any one need it, you can add the requestBody description along with content type within @Operation
@io.swagger.v3.oas.annotations.Operation(summary = "", description = "",
requestBody = @io.swagger.v3.oas.annotations.parameters.RequestBody(content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE)))
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.