OpenAPI Generator Pageable с помощью Spring - PullRequest
1 голос
/ 19 апреля 2020

Мне бы хотелось, чтобы генератор OpenAPI (https://github.com/OpenAPITools/openapi-generator) мог генерировать параметр Pageable в API в соответствии с реализацией в Spring Boot Data. Я пытался найти подходящее, готовое решение, но не смог его найти.

В идеале этот параметр Pageable следует добавлять только в методы GET следующим образом:

default ResponseEntity<User> getUser(@ApiParam(value = "value",required=true) @PathVariable("id") Long id, **Pageable pageable**)

Так что после реализации этого интерфейса в моем контроллере мне нужно будет переопределить его и иметь вышеупомянутый параметр Pageable. Я не хочу иметь отдельные параметры для размера или страницы, только этот Pageable здесь.

Спасибо за любые советы и помощь!

1 Ответ

1 голос
/ 22 апреля 2020

К сожалению, это не окончательное решение, но оно на полпути. Может быть, это все равно поможет.

Определяя параметры для вывода страниц (size, page et c.) В качестве параметра запроса объекта, можно указать генератору использовать объект Spring вместо генерации Pageable класс от API. Это выполняется с помощью сопоставления импорта.

в gradle:

openApiGenerate {
    ....
    importMappings = [
        'Pageable': 'org.springframework.data.domain.Pageable'
    ]
}

, которое указывает генератору использовать класс Spring вместо класса, определенного в API:

openapi: 3.0.2
info:
  title: Spring Page/Pageable API
  version: 1.0.0

paths:
  /page:
    get:
      parameters:
        - in: query 
          name: pageable
          required: false
          schema:
            $ref: '#/components/schemas/Pageable'
      responses:
        ...

components:
  schemas:
    Pageable: 
      description: minimal Pageable query parameters
      type: object
      properties:
        page:
          type: integer
        size:
          type: integer

Проблема с отображением заключается в том, что генератор все еще добавляет аннотацию @RequestParam() и что снова нарушает . Это работает, только если оно НЕ аннотировано.

Если вы немного любите приключения, вы можете попробовать openapi-processor-spring (я автор). Это действительно обрабатывает пример выше. Но у него могут быть другие ограничения, которые вам не нравятся.

...