在 OpenApi 3 中展平 RequestParam 对象

Flattening RequestParam Object in OpenApi 3

我正在从 swagger 2 迁移到 OpenApi 3。

Swagger 2 示例代码


    @ApiOperation(value = "", nickname = "")
        @GetMapping
          public List<Employee> findEmployees(@Valid Dto dto) {
                return employeeService.findEmployees(dto);
                }

OpenApi 3 代码


    @Operation(summary = "")
        @GetMapping
          public List<Employee> findEmployees(@Valid Dto dto) {
                return employeeService.findEmployees(dto);
                }

DTO Class


    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public class Dto {
        private String status;
        private String name;
        private String destination;
    }

在这两种情况下,swagger-ui 的生成存在显着差异。

Swagger 2 将 DTO 对象显示为扁平化为单个查询参数

Image Flattening of object as individual query parameters happens in Swagger 2 ui

而 OpenApi 3 创建一个 JSON 对象:

Image Object doesnot flattens but creates a json object

我想在 OpenApi 3 中实现扁平化行为,就像它在 Swagger 2 中那样。 有什么方法可以在 OPENAPI 3 中实现相同的效果。

经过一番研究,我发现新版本的 openapiui 依赖已于 2020 年 4 月 12 日发布,它解决了我手头的问题。从版本 1.3.2 开始可用。

<!-- https://mvnrepository.com/artifact/org.springdoc/springdoc-openapi-ui -->
<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-ui</artifactId>
    <version>1.3.2</version>
</dependency>

查询参数对象前使用Annotation @ParameterObject解决


   @Operation(summary = "")
        @GetMapping
          public List<Employee> findEmployees(**@ParameterObject** @Valid Dto dto) {
                return employeeService.findEmployees(dto);
                }