@PostMapping(value = "/staticFile", consumes = {"multipart/form-data"})
public JsonEntity<UploadFeedbackBO> uploadStaticFile(@RequestPart(value = "file") MultipartFile file
, @RequestParam(required = false) String subPath)
我是这样写的,但是启动项目后,swagger-ui 里面 subPath 在 formData 里面。
版本:swagger 2.9.2, springboot 2.3.1
Swagger 2.x这个版本的 Swagger 不支持将
@RequestParam
和@RequestPart
注解混合使用来上传文件和表单参数。如果你想要在 Swagger 页面中将subPath
参数显示到表单中(而不是在文件上传部分),可以尝试以下几种方法:1.升级到 Swagger 3.x
Swagger 3.x 支持使用
@Parameter
的in
属性来指定参数在请求体中的位置,从而可以自定义表单和文件上传。你可以在你的代码中添加如下配置,使用@Parameter
注解来指定参数位置:在上面的代码中,我们使用了
@Parameter
注解来指定subPath
参数的位置为 QUERY,这样 Swagger 就会将它显示到表单的 QUERY 参数中。需要注意的是,Swagger 3.x 的配置方式和 2.x 不同,你需要在
pom.xml
中引入springdoc-openapi-ui
和springdoc-openapi-webmvc-core
,然后添加相应的配置。2.使用 Swagger 注解扩展
如果你无法升级 Swagger 版本,则可以尝试使用 Swagger 注解扩展来解决这个问题。具体来说,你可以自定义一个注解,用来指定参数在表单中的位置,然后在控制器中使用这个自定义注解来绑定参数。
代码示例如下:
在上面的代码中,我们定义了一个
@FormParam
注解,用来指定参数在表单中的位置。然后,我们可以在控制器中使用@FormParam
注解来绑定表单参数。在上面的代码中,我们使用
@FormParam
注解来指定subPath
参数在表单中的位置。注意,这里我们不需要使用@RequestParam
注解来指定参数位置,因为 Swagger 自定义注解已经包含了这个信息。需要注意的是,这种方法需要你自定义一个注解,并且在控制器中使用这个自定义注解来绑定参数。因此,当你的表单参数名称过多时,代码量可能会比较大。