Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a way to share swagger annotation for different methods?

I have different RestAPI methods that correspond to endpoints and I would like to share their @ApiResponses to avoid code duplication. I basically have the following annotation to 8 different methods and I would like ideally to define it only once.

@ApiResponses(value = {@ApiResponse(code = 200, message = "OK"),
            @ApiResponse(code = 400, message = "Bad Request", response = ResourceErrorModel.class),
            @ApiResponse(code = 401, message = "Unauthorized", response = ResourceErrorModel.class),
            @ApiResponse(code = 403, message = "Forbidden", response = ResourceErrorModel.class),
            @ApiResponse(code = 404, message = "Not Found", response = ResourceErrorModel.class),
            @ApiResponse(code = 409, message = "Conflict", response = ResourceErrorModel.class),
            @ApiResponse(code = 422, message = "Unprocessable Entity", response = ResourceErrorModel.class),
            @ApiResponse(code = 424, message = "Failed Dependency", response = ResourceErrorModel.class)})
like image 584
Dimitris Selalmazidis Avatar asked Oct 24 '25 15:10

Dimitris Selalmazidis


2 Answers

Create a custom interface as CustomAPIResponse as below:

@Target({METHOD, TYPE})
@ApiResponses(value = {
            @ApiResponse(code = 200, message = "OK"),
            @ApiResponse(code = 400, message = "Bad Request", response = ResourceErrorModel.class),
            @ApiResponse(code = 401, message = "Unauthorized", response = ResourceErrorModel.class),
            @ApiResponse(code = 403, message = "Forbidden", response = ResourceErrorModel.class),
            @ApiResponse(code = 404, message = "Not Found", response = ResourceErrorModel.class),
            @ApiResponse(code = 409, message = "Conflict", response = ResourceErrorModel.class),
            @ApiResponse(code = 422, message = "Unprocessable Entity", response = ResourceErrorModel.class),
            @ApiResponse(code = 424, message = "Failed Dependency", response = ResourceErrorModel.class)})
public @interface CustomAPIResponse{}

Then over your each controller method of REST API simply annotate the function with @CustomAPIResponse. This will simply add all of the annotations mentioned in CustomAPIResponse class.

You can create multiple such type of @interface class & also single function can be annotated with multiple custom annotations as created above.

like image 68
AshwinK Avatar answered Oct 27 '25 03:10

AshwinK


You could try to create your own annotation and add it on your methods:

@Target(value=METHOD)
@Retention(value=RUNTIME)
@ApiResponses(value = {@ApiResponse(code = 200, message = "OK"),
            @ApiResponse(code = 400, message = "Bad Request", response = ResourceErrorModel.class),
            @ApiResponse(code = 401, message = "Unauthorized", response = ResourceErrorModel.class),
            @ApiResponse(code = 403, message = "Forbidden", response = ResourceErrorModel.class),
            @ApiResponse(code = 404, message = "Not Found", response = ResourceErrorModel.class),
            @ApiResponse(code = 409, message = "Conflict", response = ResourceErrorModel.class),
            @ApiResponse(code = 422, message = "Unprocessable Entity", response = ResourceErrorModel.class),
            @ApiResponse(code = 424, message = "Failed Dependency", response = ResourceErrorModel.class)})
public @interface SomeCustomAnnotation {}
like image 34
Michiel Avatar answered Oct 27 '25 03:10

Michiel



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!