springdoc-openapi-ui + swagger ไม่เข้าใจ @PathVariable required = false flag

Nov 20 2020

ฉันใช้ไลบรารีนี้เพื่อสร้างเอกสารประกอบ:

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

ฉันมีตัวควบคุมนี้:

@RestController
public class TestController {

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

แต่ฉันได้รับเอกสารนี้:

ทำไมrequired = falseไม่ทำงาน

ฉันลองสิ่งนี้:

@RestController
public class TestController {

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

มันใช้ไม่ได้ด้วย

แก้ไข : (คำตอบสำหรับความคิดเห็น @Helen) - แน่นอนฉันรู้เกี่ยวกับสิ่งนี้:

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

และฉันลองสิ่งนี้:

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

มันทำให้เอกสารแย่ลง ฉันจึงไม่ได้เพิ่มรหัสนี้ ด้วย{"/test", "/test{hz}"}ลักษณะเช่นนี้:

คำตอบ

1 brianbro Dec 01 2020 at 20:52

เป็นไปตามข้อกำหนด OpenAPI

พารามิเตอร์พา ธ แต่ละรายการต้องถูกแทนที่ด้วยค่าจริงเมื่อไคลเอ็นต์ทำการเรียก API ใน OpenAPI พารามิเตอร์พา ธ ถูกกำหนดโดยใช้ in: path ชื่อพารามิเตอร์ต้องตรงกับที่ระบุในพา ธ อย่าลืมเพิ่มrequired: trueเนื่องจากต้องใช้พารามิเตอร์พา ธ เสมอ

คุณสามารถดูเอกสารประกอบ:

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