springdoc-openapi-ui + swagger non capisce @PathVariable required = false flag

Nov 20 2020

Uso questa libreria per la documentazione di generazione:

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

Ho questo controller:

@RestController
public class TestController {

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

Ma ottengo questa documentazione:

Perché required = falsenon funziona?

Ho provato questo:

@RestController
public class TestController {

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

Non funziona neanche

EDIT : (risposta per il commento di @Helen) - Certo che lo so:

@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 ho provato questo:

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

Rende la documentazione peggiore. quindi non ho aggiunto questo codice. Con {"/test", "/test{hz}"}Sembra così:

Risposte

1 brianbro Dec 01 2020 at 20:52

Questo è conforme alla specifica OpenAPI.

Ogni parametro del percorso deve essere sostituito con un valore effettivo quando il client effettua una chiamata API. In OpenAPI, un parametro di percorso viene definito utilizzando in: path. Il nome del parametro deve essere lo stesso specificato nel percorso. Ricorda anche di aggiungere required: true , perché i parametri del percorso sono sempre obbligatori.

Puoi dare un'occhiata alla documentazione:

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