@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区别内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论