springdoc-openapi-ui + swagger do n't understand @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