springdoc-openapi-ui + swagger não entende @PathVariable required = false flag

Nov 20 2020

Eu uso esta biblioteca para documentação de geração:

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

Eu tenho este controlador:

@RestController
public class TestController {

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

Mas eu recebo esta documentação:

Por required = falseque não funciona?

Eu tentei isso:

@RestController
public class TestController {

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

Também não funciona

EDITAR : (Resposta para comentário de @Helen) - Claro que sei sobre isso:

@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";
    }
}

E eu tentei isso:

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

Isso torna a documentação pior. então eu não adicionei este código. Com {"/test", "/test{hz}"}parece assim:

Respostas

1 brianbro Dec 01 2020 at 20:52

Isso está em conformidade com a especificação OpenAPI.

Cada parâmetro de caminho deve ser substituído por um valor real quando o cliente faz uma chamada de API. No OpenAPI, um parâmetro de caminho é definido usando in: path. O nome do parâmetro deve ser igual ao especificado no caminho. Lembre-se também de adicionar required: true , porque os parâmetros do caminho são sempre necessários.

Você pode dar uma olhada na documentação:

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