Есть ли способ поделиться аннотацией Swagger для разных методов? - PullRequest
0 голосов
/ 26 апреля 2019

У меня есть разные методы RestAPI, которые соответствуют конечным точкам, и я хотел бы поделиться их @ApiResponses, чтобы избежать дублирования кода.В основном у меня есть следующая аннотация к 8 различным методам, и я хотел бы идеально определить ее только один раз.

@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)})

Ответы [ 3 ]

2 голосов
/ 26 апреля 2019

Вы можете попытаться создать собственную аннотацию и добавить ее в свои методы:

@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 {}
1 голос
/ 26 апреля 2019

Создайте пользовательский интерфейс как CustomAPIResponse, как показано ниже:

@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{}

Затем над каждым контроллером REST API просто аннотируйте функцию с помощью @CustomAPIResponse. Это просто добавит все аннотации, упомянутые в CustomAPIResponse классе.

Вы можете создать несколько таких типов @interface класса, а также одну функцию можно аннотировать несколькими пользовательскими аннотациями, как было создано выше.

1 голос
/ 26 апреля 2019

Вы можете создать свою собственную аннотацию, которая помечена @ApiResponses:

@Retention(RUNTIME)
@Target({METHOD, TYPE})
@ApiResponses({
        @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 DefaultApiResponses {

}

Затем просто аннотируйте методы вашего контроллера:

@GetMapping("/foo")
@DefaultApiResponses
public Response<Foo> getFoo() {
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...