springdoc-openapi-ui + swagger ne comprend pas @PathVariable required = false flag

Nov 20 2020

J'utilise cette bibliothèque pour la documentation de génération:

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

J'ai ce contrôleur:

@RestController
public class TestController {

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

Mais j'obtiens cette documentation:

Pourquoi required = falseça ne marche pas?

J'ai essayé ceci:

@RestController
public class TestController {

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

Ça ne marche pas trop

EDIT : (Réponse pour le commentaire @Helen) - Bien sûr, je sais à ce sujet:

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

Et j'ai essayé ceci:

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

Cela aggrave la documentation. donc je n'ai pas ajouté ce code. Avec {"/test", "/test{hz}"}ça ressemble à ceci:

Réponses

1 brianbro Dec 01 2020 at 20:52

Ceci est conforme à la spécification OpenAPI.

Chaque paramètre de chemin doit être remplacé par une valeur réelle lorsque le client effectue un appel API. Dans OpenAPI, un paramètre de chemin est défini à l'aide de in: path. Le nom du paramètre doit être le même que celui spécifié dans le chemin. N'oubliez pas d'ajouter required: true , car les paramètres de chemin sont toujours requis.

Vous pouvez consulter la documentation:

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