@RequestPart解决同时上传文件和传递参数问题
@RequestBody和@RequestParam和@RequestPart使用场景
1.@RequestBody
使用此注解接收参数时,适用于请求体格式为 application/json
,只能用对象接收.
2.@RequestParam
接收的参数是来自HTTP 请求体 或 请求url 的QueryString中只能用来接收基本数据类型、String 或者MultipartFile类型,不能同时接收请求体中非String(json)和MultipartFile两种类型同传的 form-data 请求体.
3.@RequestPart
可以同时上传文件和json(任意)两种格式的form-data请求体.
@RequestParam和@RequestPart的区别
@RequestPart
@RequestPart
这个注解用在multipart/form-data
表单提交请求的方法上。
支持的请求方法的方式MultipartFile,属于Spring的MultipartResolver类。这个请求是通过http协议传输的。
@RequestParam
@RequestParam
支持application/json
,也同样支持multipart/form-data
请求。
区别
当请求方法的请求参数类型不是String
或 MultipartFile / Par
t时,而是复杂的请求域时,@RequestParam
依赖Converter or PropertyEditor
进行数据解析, RequestPart
参考 ‘Content-Type’ header
,依赖HttpMessageConverters
进行数据解析
当请求为multipart/form-data
时,@RequestParam
只能接收String
类型的name-value
值,@RequestPart
可以接收复杂的请求域(像json、xml);@RequestParam
依赖Converter or PropertyEditor
进行数据解析, @RequestPart
参考'Content-Type' header
,依赖HttpMessageConverters
进行数据解析。
前台请求:
- jsonData为Person对象的json字符串
- uploadFile为上传的图片
前端代码参考 VUE
1 | let formData = new FormData(); |
后台接收:
@RequestPart可以将jsonData的json数据转换为Person对象
1 |
|
@RequestParam对于jsonData的json数据只能用String字符串来接收
1 |
|
总结
当请求头中指定Content-Type:multipart/form-data
时,传递的json参数,@RequestPart
注解可以用对象来接收,@RequestParam
只能用字符串接收
GitHub IssuesGitHub Discussions