Reputation: 2882
I use .useDefaultResponseMessages(false)
and in each method
@ApiResponses(value = {
@ApiResponse(code = 200, message = "Success", response = Order.class),
@ApiResponse(code = 401, message = "Unauthorized"),
@ApiResponse(code = 403, message = "Forbidden"),
@ApiResponse(code = 404, message = "Not Found"),
@ApiResponse(code = 500, message = "Failure")})
public Order getOrder......
@ApiResponses(value = {
@ApiResponse(code = 200, message = "Success", response = User.class),
@ApiResponse(code = 401, message = "Unauthorized"),
@ApiResponse(code = 403, message = "Forbidden"),
@ApiResponse(code = 404, message = "Not Found"),
@ApiResponse(code = 500, message = "Failure")})
public User getUser......
Can I combine some repeating annotations?(default)
Upvotes: 7
Views: 2899
Reputation: 37916
@ApiResponses
at controller level.Define common responses at the controller level instead of repeating them for each method:
@ApiResponses({
@ApiResponse(code = 401, message = "Unauthorized"),
@ApiResponse(code = 403, message = "Forbidden"),
@ApiResponse(code = 404, message = "Not Found"),
@ApiResponse(code = 500, message = "Failure")})
@Controller
public class UserOrderController {
@ApiResponse(code = 200, message = "Success", response = Order.class)
@GetMapping("/order")
public Order getOrder() { /*......*/ }
@ApiResponse(code = 200, message = "Success", response = User.class)
@GetMapping("/user")
public User getUser() { /*......*/ }
}
And actually, it's not required to specify response
type in @ApiResponse
if it matches method return type. So, in the provided example, we can define all responses once per controller in order to reduce repeating annotations.
Share the repeating annotations between controllers by defining a custom annotation:
/**
* A convenient meta-annotation for Swagger API responses.
*/
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@ApiResponses({
@ApiResponse(code = 200, message = "Success"),
@ApiResponse(code = 401, message = "Unauthorized"),
@ApiResponse(code = 403, message = "Forbidden"),
@ApiResponse(code = 404, message = "Not Found"),
@ApiResponse(code = 500, message = "Failure")})
@interface DefaultApiResponses {}
Then use it like this:
@DefaultApiResponses
@Controller
public class UserOrderController {
@GetMapping("/order")
public Order getOrder() { /*......*/ }
@GetMapping("/user")
public User getUser() { /*......*/ }
}
The source code presented in this answer is available over on Github.
Upvotes: 5