@RequestParam和@RequestBody的区别

@requestparam
用来处理content-type: 为 application/x-www-form-urlencoded编码的内容。(http协议中,如果不指定content-type,则默认传递的参数就是application/x-www-form-urlencoded类型)
requestparam可以接受简单类型的属性,也可以接受对象类型。
实质是将request.getparameter() 中的key-value参数map利用spring的转化机制conversionservice配置,转化成参数接收对象或字段。
tip
在content-type: application/x-www-form-urlencoded的请求中,
get 方式中querystring的值,和post方式中 body data的值都会被servlet接受到并转化到request.getparameter()参数集中,所以@requestparam可以获取的到。
@requestbody
处理httpentity传递过来的数据,一般用来处理非content-type: application/x-www-form-urlencoded编码格式的数据。
get请求中,因为没有httpentity,所以@requestbody并不适用。
post请求中,通过httpentity传递的参数,必须要在请求头中声明数据的类型content-type,springmvc通过使用handleradapter 配置的httpmessageconverters来解析httpentity中的数据,然后绑定到相应的bean上。
总结
在get请求中,不能使用@requestbody。
在post请求,可以使用@requestbody和@requestparam,但是如果使用@requestbody,对于参数转化的配置必须统一。
举个例子,在springmvc配置了httpmessageconverters处理栈中,指定json转化的格式,如date转成‘yyyy-mm-dd’,则参数接收对象包含的字段如果是date类型,就只能让客户端传递年月日的格式,不能传时分秒。因为不同的接口,它的参数可能对时间参数有不同的格式要求,所以这样做会让客户端调用同事对参数的格式有点困惑,所以说扩展性不高。
如果使用@requestparam来接受参数,可以在接受参数的model中设置@dateformat指定所需要接受时间参数的格式。
另外,使用@requestbody接受的参数是不会被servlet转化统一放在request对象的param参数集中,@requestparam是可以的。
综上所述,一般情况下,推荐使用@requestparam注解来接受http请求参数。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值