我正在尝试将我正在使用的 API 上的某些端点的 Explode 设置为 false,但它似乎无法正常工作。我正在使用最新版本的 Swagger(截至本文为 2.2.9)。我想出了以下人为的示例,其中爆炸被忽略:
@GET
@Path("bogus")
@JSONP(queryParam = "callback")
public void bogus(
@Parameter(description = "Extended options", in = ParameterIn.QUERY,
explode = Explode.FALSE,
style = ParameterStyle.FORM
)
@QueryParam("extendedOptions") String extendedOptions) {
}
一般来说,我希望用户可以从我们规范中定义的一些特定选项中进行选择,但让他们知道他们需要以逗号分隔的格式包含这些选项。代码示例:
@GET
@Path("bogus")
@JSONP(queryParam = "callback")
public void bogus(
@Parameter(description = "Extended options", in = ParameterIn.QUERY,
explode = Explode.FALSE,
style = ParameterStyle.FORM
array = @ArraySchema(schema = @Schema(type = "array", allowableValues = {"first", "second", "third"}))
)
@QueryParam("extendedOptions") String extendedOptions) {
}
我希望规范能让用户知道他们需要像这样格式化扩展选项:
myapi.com/SomeStuffHere?extendedOptions=first,second,third
不太确定我在这里做错了什么,或者 Swagger 是否不完全支持此选项。据我所知,我的实现似乎符合文档。
终于我找到了适合我的案例的工作解决方案。幸运的是,我不需要将 mediaType 设置为 application/x-www-form-urlencoded,如此处提到的OpenApi doc。另外还有一些未解决的错误:Github bug。这是 openDoc:OpenApi 文档
我的工作解决方案:
@Parameter(required = false, description = "blah blah",
explode = Explode.FALSE, array = @ArraySchema(schema = @Schema(implementation = String.class)))
@RequestParam(required = false) List<String> ids,