SpringMVC 开发接口,如何在上传文件的同时通过 query 传递参数?
@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
注解来指定参数位置:
@PostMapping(value = "/staticFile", consumes = {"multipart/form-data"})@Operation(summary = "上传静态资源文件")
public JsonEntity<UploadFeedbackBO> uploadStaticFile(@RequestPart(value = "file") MultipartFile file,
@Parameter(in = ParameterIn.QUERY, name = "subPath", description = "子路径", example = "abc") @RequestParam(required = false) String subPath) {
// handle file upload...
}
在上面的代码中,我们使用了 @Parameter
注解来指定 subPath
参数的位置为 QUERY,这样 Swagger 就会将它显示到表单的 QUERY 参数中。
需要注意的是,Swagger 3.x 的配置方式和 2.x 不同,你需要在 pom.xml
中引入 springdoc-openapi-ui
和 springdoc-openapi-webmvc-core
,然后添加相应的配置。
2.使用 Swagger 注解扩展
如果你无法升级 Swagger 版本,则可以尝试使用 Swagger 注解扩展来解决这个问题。具体来说,你可以自定义一个注解,用来指定参数在表单中的位置,然后在控制器中使用这个自定义注解来绑定参数。
代码示例如下:
@Target(ElementType.PARAMETER)@Retention(RetentionPolicy.RUNTIME)
@Parameter(in = ParameterIn.QUERY)
public @interface FormParam {
String value() default "";
}
在上面的代码中,我们定义了一个 @FormParam
注解,用来指定参数在表单中的位置。然后,我们可以在控制器中使用 @FormParam
注解来绑定表单参数。
@PostMapping(value = "/staticFile", consumes = { "multipart/form-data" })public JsonEntity<UploadFeedbackBO> uploadStaticFile(@RequestPart(value = "file") MultipartFile file,
@FormParam("subPath") String subPath) {
// handle file upload...
}
在上面的代码中,我们使用 @FormParam
注解来指定 subPath
参数在表单中的位置。注意,这里我们不需要使用 @RequestParam
注解来指定参数位置,因为 Swagger 自定义注解已经包含了这个信息。
需要注意的是,这种方法需要你自定义一个注解,并且在控制器中使用这个自定义注解来绑定参数。因此,当你的表单参数名称过多时,代码量可能会比较大。
回答:
将@RequestPart 替换为 @RequestParam
回答:
封装一个对象,包含MultipartFile和String类型的属性,Controller中用这个对象接收,不需要加@RequestParam注解,get一下属性就能拿到了。
以上是 SpringMVC 开发接口,如何在上传文件的同时通过 query 传递参数? 的全部内容, 来源链接: utcz.com/p/945098.html