@RequestBody @RequestParam解析

@RequestBody @RequestParam解析

大概是年纪大了,最近越发觉得脑子不好使,结合别人的见解,仅以此记录自己学习的过程。

在区分@RequestBody@RequestParam时,我们首先需要区分GET和POST,相信这对稍微有基础点的童鞋并不不陌生;
首先需要申明的是,GET请求是可以拥有请求体的,虽然我们经常没有这样去处理.在 GET请求体中的数据一般都是不做处理的,有些 http 的 lib 里不让甚至直接不提供 GET 方法追加请求体的操作。

POST请求拥有请求体,并且请求数据一般都是放在请求体当中的。所以在处理POST请求时,通常都是从请求体中获取数据。

jQuery中,$.ajax()默认发送的参数类型及编码为:application/x-www-form-urlcoded,而@RequestBody处理的参数类型及编码为:aplication/json或者是application/xml,通过contentType属性来指定

在传递之前,对JSON对象要使用JSON.stringify(),JSON.stringify() 方法将一个 JavaScript 值(对象或者数组)转换为一个 JSON 字符串

@RequestBody

用于接收前端传递给后端的json字符串中的数据。(处理json格式的数据)
@RequestBody用来接收前端传递给后端的json字符串中的数据,GET方式的请求一般通过URL中携带key-value参数,而@RequestBody接收的是请求体中的数据(json格式的数据,只有请求体中能保存json),所以使用@RequestBody接收数据的时候必须是POST方式等方式。
@RequestBody与@RequestParam()可以同时使用,但@RequestBody最多只能有一个,而@RequestParam()可以多个。
(@RequestBody Map map)
(@RequestBody Object object)

(@RequestBody Map map)先对简单,将json解析成Map形式的key-value对,直接通过map.get(“KeyName”)就能拿到值了
(@RequestBody Object object) 通过json字符串中的key来匹配对应实体类的属性如果匹配一致且json中的该key对应的值符合实体类的对应属性的类型要求时,会调用实体类的setter方法将值注入到该属性。

在(@RequestBody Object object)中,前端POST过来的数据会通过反序列数据到实体类中,并且在反序列的过程中会进行类型的转换。
在json中应该用null来代表空值,如果是"“(空字符串)会判断为空串,如果实体类属性是String类型的,那么接受到的就是”",如果实现类属性类型是Integer、Double等类型,那么接收到的就是null。

(@RequestBody Object object)内部是通过传递过来的数据中的Key寻找setter方法,有则调用,无则不作任何操作(其实可以设计)。
如果通过Key匹配到setter方法,但是Value无法转换为对应的实例类属性的类型时,抛出异常。

@RequestParam

@RequestParam用来处理 Content-Type 为 application/x-www-form-urlencoded 编码的内容,Content-Type默认为该属性

可以用于接收URL中的参数并捆绑到方法的参数中,也可以接受post请求体中的Content-Type 为 application/x-www-form-urlencoded的数据。(post比较常用的是json格式数据)

可混合使用

@RequestBody与@RequestParam()可以同时使用,但@RequestBody最多只能有一个,而@RequestParam()可以多个。

注:当同时使用@RequestParam()和@RequestBody时,@RequestParam()指定的参数可以是普通元素、数组、集合、对象等等(即:当,@RequestBody 与@RequestParam()可以同时使用时,原SpringMVC接收参数的机制不变,只不过RequestBody 接收的是请求体里面的数据;而RequestParam接收的是key-value里面的参数,所以它会被切面进行处理从而可以用普通元素、数组、集合、对象等接收)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值