springdoc-openapi-ui + swagger не понимает @PathVariable required = false flag

Nov 20 2020

Я использую эту библиотеку для генерации документации:

<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-ui</artifactId>
    <version>1.5.0</version>
</dependency>

У меня такой контроллер:

@RestController
public class TestController {

    @GetMapping("/test{hz}")
    public String test(@PathVariable(value = "hz", required = false) String hz) {
        return "test";
    }
}

Но я получаю эту документацию:

Почему required = falseне работает?

Я пробовал это:

@RestController
public class TestController {

    @GetMapping("/test{hz}")
    public String test(
            @Parameter(description = "foo", required = false)
            @PathVariable(value = "hz", required = false) String hz) {
        return "test";
    }
}

Это тоже не работает

РЕДАКТИРОВАТЬ : (Ответ на комментарий @Helen) - Конечно, я знаю об этом:

@RestController
public class TestController {

    @GetMapping(value = {"/test", "/test{hz}"})
    public String test(
            @Parameter(description = "foo", required = false)
            @PathVariable(value = "hz", required = false) String hz) {
        return "test";
    }
}

И я попробовал это:

@PathVariable(value = "hz", required = false) Optional<String> hz

Это ухудшает документацию. поэтому я не добавлял этот код. С {"/test", "/test{hz}"}Это выглядит так:

Ответы

1 brianbro Dec 01 2020 at 20:52

Это соответствует спецификации OpenAPI.

Каждый параметр пути должен быть заменен фактическим значением, когда клиент выполняет вызов API. В OpenAPI параметр пути определяется с помощью in: path. Имя параметра должно быть таким же, как указано в пути. Также не забудьте добавить required: true , потому что параметры пути требуются всегда.

Вы можете посмотреть документацию:

  • https://swagger.io/docs/specification/describing-parameters/#path-parameters