Java Spring Boot OpenApi 3 - 如何为 RequestBody 添加 @Schema?

问题描述

@PostMapping(produces = "application/json",consumes = "application/json")
public ResponseEntity<Book> addBook(
        @RequestBody(description = "Book to add.",required = true,content = @Content(
                            schema=@Schema(implementation = Book.class)))   
        @Valid Book book
) {
    return ResponseEntity.ok(bookRepository.add(Book));

}

2.

    @PostMapping(produces = "application/json",consumes = "application/json")
public ResponseEntity<BasicBook> addBook(
        @RequestBody(description = "Book to add.",content = @Content(
                            schema=@Schema(allOf = BasicBook.class,oneOf = {
                                HomeScience.class,GeneralScience.class })))   
        @Valid BasicBook book
) {
    return ResponseEntity.ok(bookRepository.add(Book));

}

上面代码段 1. 工作正常。在 Swagger UI 中,我可以看到带有示例值的 RequestBody,我可以在其中执行该值。

但是对于 snippet 2.,当我尝试继承(即 oneOf、allOf 或 anyOf)时,此架构不起作用。 只有 BasicBook 属性进入 (Swagger UI)RequestBody 的示例值。

我也试过@Parameter。这是代码

3.

        @PostMapping(produces = "application/json",consumes = "application/json")
public ResponseEntity<BasicBook> addBook(
        @Parameter(required = true,description = "DTO for book.",content = {
                @Content(mediaType = "application/json",schema = @Schema(allOf = BasicBook.class,oneOf = {
                        HomeScience.class,GeneralScience.class },discriminatorMapping = {
                                @discriminatorMapping(value = "HOME",schema = HomeScience.class),@discriminatorMapping(value = "GENERAL",schema = GeneralScience.class) },discriminatorProperty = "type")) }) 
        @RequestBody @Valid BasicBook book
) {
    return ResponseEntity.ok(bookRepository.add(Book));

}

snippet 3. 也没有给出想要的结果。

如何在 RequestBody 中使用 oneOf、allOf 或 anyOf。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)