@RequestPart和@RequestBody都是Spring MVC注解,用于处理HTTP请求参数,但是它们的使用有所不同。
@RequestBody主要用于处理POST请求的请求体中的参数,比如表单提交的JSON数据,它会将请求体中的参数转换为Java对象。
@RequestPart用于处理Multipat请求,通常用于文件上传。它可以将请求中的每人部分映射到Controler方法的参数中,支持文件上传和表单数据。
@RequestPart这个注解用在multipart/form-data表单提交请求的方法上。
支持的请求方法的方式MultipartFile,属于Spring的MultipartResolver类。这个请求是通过http协议传输的
@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只能用字符串接收