springMVC中@RequestParam和@RequestPart的区别
作者:借物小人
@RequestPart
@RequestPart
这个注解用在multipart/form-data
表单提交请求的方法上。- 支持的请求方法的方式
MultipartFile
,属于Spring的MultipartResolver
类。这个请求是通过http协议
传输的
@RequestParam
@RequestParam
支持’application/json’,也同样支持multipart/form-data
请求
@RequestParam用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容。(Http协议中,如果不指定Content-Type,则默认传递的参数就是application/x-www-form-urlencoded类型)
@RequestParam可以接受简单类型的属性,也可以接受对象类型。(实质是将Request.getParameter() 中的Key-Value参数Map利用Spring的转化机制ConversionService配置,转化成参数接收对象或字段。)
知识点:在Content-Type: application/x-www-form-urlencoded的请求中,get 方式中queryString的值,和post方式中body data 的值都会被Servlet接受到并转化到Request.getParameter()参数集中,所以@RequestParam可以获取的到。
区别
当请求方法的请求参数类型不是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只能用字符串接收
到此这篇关于springMVC中@RequestParam和@RequestPart的区别的文章就介绍到这了,更多相关@RequestParam和@RequestPart区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:
- @RequestParam注解加与不加有什么区别
- 基于params、@PathVariabl和@RequestParam的用法与区别说明
- 基于@RequestParam name和value属性的区别
- @RequestBody,@RequestParam和@Param的区别说明
- 方法参数属性params,@PathVariable和@RequestParam用法及区别
- @PathVariable、@RequestParam和@RequestBody的区别
- @RequestParam 和@RequestBody注解的区别解析
- Springboot中@RequestParam和@PathVariable的用法与区别详解
- Spring中@PathVariable和@RequestParam注解的用法区别
- SpringBoot中@PathVariable、@RequestParam和@RequestBody的区别和使用详解
- @RequestAttribute和@RequestParam注解的区别及说明