摘要:controller @requestbody 包含MultipartFile 类型属性报错解决方案

报错原因

前端在接口上传文件的同时会将请求header的content-type设置为:multipart/form-data

或者form表单提交的时候将enctype设置为"multipart/form-data" 。

后端收到请求时由于请求体有@RequestBody 注解标识,通常会用application/json, application/xml处理content-type

此时会报编码格式的问题就会报以下错误

{
	"timestamp": 1565077141995,
	"status": 415,
	"error": "Unsupported Media Type",
	"message": "Content type 'multipart/form-data;boundary=--------------------------541536646861632702696448;charset=UTF-8' not supported",
	"path": "/fileUpload/picture"
}

经过分析:

MultipartFile这样的multipart/form-data媒体类型优先级会高于application/json,

而配置@RequestBody 感觉使用一个低优先级的handle一个高优先级的从而报错。

所以在multipart/form-data媒体类型请求时将@RequestBody去掉就可以了。

换而言之你不能在一个接口中既要获取数据,也要获取文件,除非你不是用这样的方式。