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