Страница генератора OpenAPI с Spring

Мне нужен генератор 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 здесь.

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


person Bloodlex    schedule 19.04.2020    source источник
comment
Насколько я знаю, это невозможно без добавления размера / страницы в api. Почему ты хочешь это скрыть? Без него никто не знает, что это пейджинг ...   -  person Martin Hauner    schedule 20.04.2020
comment
@MartinHauner Мы хотели бы иметь страницу, размер, сортировку в нашем файле openAPI .yaml, чтобы другие наши команды знали, что подкачка есть, но в нашем сгенерированном API в качестве бэкэнда мы хотели бы иметь только этот параметр Pageable, поскольку spring обработает это, имея страницу, размер, параметр сортировки и преобразует его в объект Pageable   -  person Bloodlex    schedule 21.04.2020


Ответы (1)


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

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

в градиенте:

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 (я автор). Он действительно обрабатывает приведенный выше пример. Но у него могут быть и другие ограничения, которые вам не нравятся.

person Martin Hauner    schedule 22.04.2020
comment
Благодарность! Хотелось бы, чтобы он был более настраиваемым, чем кажется, отличная идея с созданием вашего процессора, мне все еще нужно это проверить :) - person Bloodlex; 03.05.2020