问题描述
我使用的是 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 中生成所需的参数组件:
但是,我无法使用任何可用的 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.ApiImplicitParam
或 io.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")))