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的配置:
- 确保在请求的
Body标签下选中的是form-data; - 添加参数时,Key必须严格写"file"(和你
@RequestParam(value = "file")里的value完全一致); - 参数类型要选
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
相关产品推荐
相关产品推荐

