springdoc-openapi-ui + swagger no entiendo @PathVariable required = bandera falsa

Nov 20 2020

Utilizo esta biblioteca para la documentación de generación:

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

Tengo este controlador:

@RestController
public class TestController {

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

Pero obtengo esta documentación:

¿ required = falsePor qué no funciona?

Probé esto:

@RestController
public class TestController {

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

No funciona demasiado

EDITAR : (Respuesta para el comentario de @Helen) - Por supuesto que sé sobre esto:

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

Y probé esto:

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

Empeora la documentación. así que no agregué este código. Con se {"/test", "/test{hz}"}ve así:

Respuestas

1 brianbro Dec 01 2020 at 20:52

Esto se ajusta a la especificación OpenAPI.

Cada parámetro de ruta debe sustituirse por un valor real cuando el cliente realiza una llamada a la API. En OpenAPI, un parámetro de ruta se define usando in: ruta. El nombre del parámetro debe ser el mismo que el especificado en la ruta. También recuerde agregar required: true , porque los parámetros de ruta siempre son obligatorios.

Puedes echar un vistazo a la documentación:

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