小编cod*_*e99的帖子

Swagger UI OpenAPI 3,查询参数显示为对象而不是可更改值的字段

之前在 SpringBoot v2.5.7 中,我有这个 Spring REST 控制器方法。它有一个TestCriteriaDTO 类型作为路径参数。

@GetMapping(path = "/test")
public void test(TestCriteria testCriteria) {

}
Run Code Online (Sandbox Code Playgroud)

TestCriteria班级就是这样的。(Language是一个可以采用 或EN的枚举FR)。

public class TestCriteria {
    @ApiModelProperty(allowEmptyValue = true)
    List<Language> langauges;
    
}
Run Code Online (Sandbox Code Playgroud)

我使用了 Springfox Swagger (springfox-boot-starter v3),Swagger UI 如下所示:

但后来我不得不将 SpringBoot 升级到 v3,并使用 Springdoc 和 OpenAPI v3 for Swagger。现在TestCriteria类看起来像这样:

public class TestCriteria {

    @Schema(type="array")
    @Parameter(allowEmptyValue = true)
    List<Langauge> languages;

}
Run Code Online (Sandbox Code Playgroud)

现在 Swagger UI 不再显示languages为可选择值的字段,而是显示为对象。 在此输入图像描述

我还比较了生成的 OpenAPI 定义,发现:

以前的 API …

swagger-ui spring-boot openapi springdoc springfox-boot-starter

1
推荐指数
1
解决办法
4613
查看次数