You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 3.1.1 多部分表单文件上传报错:@RequestParam报400,@RequestBody报415

Spring Boot 3.1.1 多部分表单文件上传报错:@RequestParam报400,@RequestBody报415

我来帮你捋捋这两个报错的根源和解决办法哈:

关于Attempt 1的400错误

你遇到的MissingRequestValueException提示“找不到query参数'file'”,看起来有点矛盾——毕竟你明明把文件放在了form-data请求体里。其实问题大概率出在Postman的请求设置或者参数匹配上:

  • 首先检查Postman的配置:
    1. 确保在请求的Body标签下选中的是form-data;
    2. 添加参数时,Key必须严格写"file"(和你@RequestParam(value = "file")里的value完全一致);
    3. 参数类型要选File(不是默认的Text),然后在Value栏选择本地要上传的文件。
  • 另外确认Spring Boot的multipart支持:3.x版本默认是开启的,但如果你有自定义配置,要保证spring.servlet.multipart.enabled=true,同时可以根据需要调整文件大小限制(比如spring.servlet.multipart.max-file-size=10MB)。

其实@RequestParam本身是完全支持接收multipart/form-data里的文件参数的,只要请求设置正确,这个写法是没问题的。

关于Attempt 2的415错误

这个报错就很好理解了:@RequestBody注解是用来解析JSON、XML这类格式的请求体的,它根本不支持直接接收MultipartFile类型的文件参数,所以Spring会返回415“不支持的媒体类型”。

如果想用类似的方式接收文件,正确的注解应该是@RequestPart,写法如下:

@PostMapping(value = "/images", consumes = "multipart/form-data")
public ResponseEntity<String> uploadFile(@RequestPart("file") MultipartFile file) {
    return ResponseEntity.ok("File uploaded successfully");
}

不过用这个注解时,同样要保证Postman里的参数名是"file",类型是File,Content-Type设置为multipart/form-data。

总结

最稳妥的方案还是用你Attempt 1里的@RequestParam写法,重点把Postman的请求配置检查一遍——参数名、类型、请求体格式都要对应上,应该就能解决问题了。

备注:内容来源于stack exchange,提问作者Amy Tech

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 02:40:27