springdoc-openapi-ui + swagger anlamıyor @PathVariable gerekli = yanlış bayrak

Nov 20 2020

Bu kitaplığı nesil belgeleri için kullanıyorum:

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

Bu denetleyiciye sahibim:

@RestController
public class TestController {

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

Ama şu belgeleri alıyorum:

Neden required = falseçalışmıyor?

Bunu denedim:

@RestController
public class TestController {

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

O da çalışmıyor

DÜZENLEME : (@Helen yorumu için cevap) - Elbette bunu biliyorum:

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

Ve bunu denedim:

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

Belgeleri daha da kötüleştirir. bu yüzden bu kodu eklemedim. İle {"/test", "/test{hz}"}Şuna benzer:

Yanıtlar

1 brianbro Dec 01 2020 at 20:52

Bu, OpenAPI spesifikasyonuna uygundur.

İstemci bir API çağrısı yaptığında her bir yol parametresi gerçek bir değerle değiştirilmelidir. OpenAPI'de, in: path kullanılarak bir yol parametresi tanımlanır. Parametre adı, yolda belirtilenle aynı olmalıdır. Ayrıca gerekli: true eklemeyi unutmayın , çünkü yol parametreleri her zaman gereklidir.

Belgelere bir göz atabilirsiniz:

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