Swagger Springfox - 如何为查询参数 List<String> 生成模式类型数组

问题描述

我使用的是 springfox 3.0.0 版并使用 OAS 注释。

我需要在 Swagger JSON 中为我的方法生成这样的片段(使用模式类型数组):

"parameters":[
   {
      "name":"ids","in":"query","description":"multiple ids","required":true,"schema":{
         "uniqueItems":true,"type":"array","items":{
            "type":"string"
         }
      }
   },...
]

在 Swagger UI 中生成所需的参数组件:

Schema type array for parameter in Swagger UI

但是,我无法使用任何可用的 Swagger 注释获得此 Swagger JSON(以及参数的 Swagger UI 外观)。 目前我的控制器中有这样的代码(顺便说一句,这对 springdoc 库很有用,我们在迁移到 springfox 之前使用过它):

import io.swagger.annotations.Api;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;

@Api
@RestController
@RequestMapping("/something")
@requiredArgsConstructor
public class MyController {

  @Operation(summary = "Return list of...")
  @ApiResponse(responseCode = "200",description = "Success")
  @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE)
  public List<SomeDTO> getSomethingByIds(@Parameter(description = "List of ids") @RequestParam("ids") Set<String> ids) {
    ...
  }

但我也尝试过手动设置 io.swagger.v3.oas.annotations.Parameter 注释的架构(如 @Parameter(description = "List of ids",content = @Content(array = @ArraySchema(schema = @Schema(implementation = String.class)))) )。
还尝试尝试使用较旧的(非 OAS)Swagger 注释 - 如 io.swagger.annotations.ApiImplicitParamio.swagger.annotations.ApiParam
还尝试将 Set<String> 类型更改为 List<String>String[]
这两种方法都没有成功,无论我尝试过什么,springfox 总是像这样生成 Swagger JSON 片段(带有模式类型字符串),因此在 swagger UI 中只是简单的字符串输入:

"parameters":[
   {
      "name":"ids","description":"List of ids","style":"form","explode":true,"schema":{
         "type":"string"
      }
   },...
]

有人在这方面有更好的运气吗?

解决方法

这对我来说很好用:

@Parameter(name = "languages",in = QUERY,array = @ArraySchema( schema = @Schema(type = "string")))