Как сделать спецификацию OpenAPI с использованием обобщений в Java - PullRequest
1 голос
/ 02 марта 2020

Я использую дженерики в моем контроллере. Например, из некоторых конечных точек я возвращаю Response<News> и Response<Tag>.

Ну, Swagger автоматически генерирует эту часть yaml

responses:
        200:
          description: default response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseNews'

и

responses:
        200:
          description: default response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseTags'

Это моя сущность Response в Java.

public class Response<T> {
    private List<T> data;
    private Boolean moreDataExists;
}

Так Swagger генерирует компоненты.

ResponseNews:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/News'
        moreDataExists:
          type: boolean

ResponseTags:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Tags'
        moreDataExists:
          type: boolean

Ну, это почти дублированный код. И я хочу избежать этого, и использовать в описании моих конечных точек только Ответ , и ясно показать своим пользователям, что я использую дженерики.

Что-то вроде этого:

responses:
        200:
          description: default response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response'
                  contains: 
                    $ref: '#/components/schemas/News'

Я готов сделать это даже без Swagger, просто вручную. Есть ли способ сделать это, возможно, используя наследование или полиморфизм?

1 Ответ

1 голос
/ 01 мая 2020

Вы можете адаптировать ответ, используя @ApiResponse аннотацию swagger, где вы можете передать схему любого пользовательского объекта, который вы хотите.

...