Springdoc-OpenAPI с параметрами пути и командным объектом

Я получаю ошибки проверки в моей спецификации OpenAPI, созданной Springdoc, и не вижу, чтобы найти в Интернете пример, который соответствует тому, как сформирован мой код Java.

Я пытаюсь создать спецификацию OpenAPI с помощью Springdoc для контроллера загрузки Spring. У меня есть отображение для пути, который имеет несколько переменных пути, и сигнатура метода принимает объект команды (объект команды автоматически создается из этих переменных пути). Swagger-UI.html, похоже, работает более или менее, но сгенерированная спецификация JSON / YAML, похоже, недействительна.

Фрагмент кода, о котором я говорю:

@GetMapping("/myPath/{foo}/{bar}/{baz}")
public Mono<MyServiceResponse> doSomethingInteresting(@Valid DoSomethingInterestingCommand command) {
    return interestingService.doSomethingInteresting(command);
}

В результате создается следующий фрагмент OpenApi:

paths:
  '/myPath/{foo}/{bar}/{baz}':
    get:
      tags:
        - my-controller
      operationId: doSomethingInteresting
      parameters:
        - name: command
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/DoSomethingInterestingCommand'

Затем это приводит к таким ошибкам:

Semantic error at paths./myPath/{foo}/{bar}/{baz}
Declared path parameter "foo" needs to be defined as a path parameter at either the path or operation level

Что мне следует сделать по-другому, чтобы сгенерированная спецификация была правильно сформирована? Мне также любопытно, почему страница swagger-ui.html работает нормально, но это менее важно.


person Dmitry Sharkov    schedule 04.02.2021    source источник
comment
Думаю, будет лучше поднять вопрос на github.com/springdoc/springdoc-openapi/ проблемы   -  person Debargha Roy    schedule 10.02.2021


Ответы (1)


Чтобы создать правильную спецификацию openAPI, вы можете добавить аннотации swagger.

@Parameter(in = ParameterIn.PATH, name ="foo" ,schema = @Schema(type = "string"))
@Parameter(in = ParameterIn.PATH, name ="bar" ,schema = @Schema(type = "string"))
@Parameter(in = ParameterIn.PATH, name ="baz" ,schema = @Schema(type = "string"))
@GetMapping("/myPath/{foo}/{bar}/{baz}")
public Mono<MyServiceResponse> doSomethingInteresting(@Valid @Parameter(hidden = true) DoSomethingInterestingCommand command) {
    return interestingService.doSomethingInteresting(command);
}
person brianbro    schedule 23.05.2021