我的问题
所有使用文件上传的,接收文件流时,需要注意的点一共有两个
1、注解@RequestPart
2、请求头Content-Type=multipart/form-data
区别具体介绍
(摘录自小猎人的博客:https://blog.csdn.net/u012894692/article/details/115875674)
- @RequestPart
1、@RequestPart这个注解用在multipart/form-data表单提交请求的方法上。
2、支持的请求方法的方式MultipartFile,属于Spring的MultipartResolver类。这个请求是通过http协议传输的 - @RequestParam
1、@RequestParam支持’application/json’,也同样支持multipart/form-data请求 - 区别
当请求方法的请求参数类型不是String 或 MultipartFile / Part时,而是复杂的请求域时,@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为上传的图片
后台接收:
@RequestPart可以将jsonData的json数据转换为Person对象
@RequestMapping("jsonDataAndUploadFile")
@ResponseBody
public String jsonDataAndUploadFile(@RequestPart("uploadFile") MultiPartFile uploadFile,
@RequestPart("jsonData") Person person) {
StringBuilder sb = new StringBuilder();
sb.append(uploadFile.getOriginalFilename()).append(";;;"));
return person.toString() + ":::" + sb.toString();
@RequestParam对于jsonData的json数据只能用String字符串来接收
@RequestMapping("jsonDataAndUploadFile")
@ResponseBody
public String jsonDataAndUploadFile(@RequestPart("uploadFile") MultiPartFile uploadFile,
@RequestParam("josnData") String jsonData) {
StringBuilder sb = new StringBuilder();
sb.append(uploadFile.getOriginalFilename()).append(";;;"));
return person.toString() + ":::" + sb.toString();
}
- 总结
当请求头中指定Content-Type:multipart/form-data时,传递的json参数,@RequestPart注解可以用对象来接收,@RequestParam只能用字符串接收
===================》甲乙Rocket ;2022.08.28; 22年8月第四周
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/96193.html