SpringBoot 3.1升级后多表单数据接口无法识别文件问题咨询
SpringBoot 3.1 升级后Multipart接口无法识别文件的原因及解决办法
核心原因
SpringBoot 3.x 基于 Spring 6,Spring MVC/WebFlux 对multipart/form-data请求的参数解析规则做了严格收紧:
- 在Spring 5.x(对应Boot2.7)版本中,
@RequestParam可以兼容解析multipart中的文件项,但Spring 6开始明确区分了@RequestParam和@RequestPart的职责:@RequestParam仅用于解析普通表单字段(非文件类型的multipart项);- 文件类型的multipart项必须使用
@RequestPart注解来绑定。
- 你原代码中用
@RequestParam("file") MultipartFile file,在Spring6中会被当作普通字符串参数解析,自然无法识别上传的文件。
修复方案
将文件参数的@RequestParam替换为@RequestPart即可,修改后的代码如下:
@PostMapping(path = "/file", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public Mono<Object> upload(@RequestPart("fileRequest") String fileRequest, @RequestPart("file") MultipartFile file) throws IOException { return pinataService.uploadFile(file, fileRequest); }
额外注意事项
- 如果客户端传递的
fileRequest是普通文本,需确保对应请求part的Content-Type为text/plain(或不指定,默认会被自动识别),避免Spring误解析为其他类型。 - 若项目使用WebFlux,检查自定义MultipartResolver配置是否兼容Spring6的新规则,默认配置无需额外调整。
内容的提问来源于stack exchange,提问作者Emilianolight
相关产品推荐
相关产品推荐

