requestBody注解常用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容。

1、RequestBody的作用是将前端传来的json格式的数据转为自己定义好的javabean对象,需要注意的是传入数据的属性名称要和后端javabean中定义的一致,发送请求后可以看到在控制台中我们通过javabean对象的get方法打印出了前端传来的值,说明json数据已经成功被转换为了javabean对象,将对应的属性进行了赋值。

requestbody注解_json数据

2、后端将http输入流装配到目标类,会根据json字符串中的key来匹配对应实体类的属性,如果匹配一致且json中的key对应符合,那么后端能成功接收,json字符串中,如果value为""的话,后端对应属性如果是String类型的,那么接受到的就是"",如果后端对应的是引用类型Integer、Double等的话,那么就收的就是null,json字符串中,如果value为null的话,后端接收到的就是null。

requestbody注解_json字符串_02

3、RequestParam参数在http请求的QueryString或者FromData上,适合参数个数少,且接口比较固定的情况,RequestBody对应的是http request payload,数据在http请求的body上,也就是在HttpServletRequest.getInputStream里面。适用于复杂的数据结构,比如用xml或者json定义的复杂对象。改变这个对象的结构的时候,前端后端可以约定直接修改,遵循一定原则甚至可以兼容新旧数据结构,而接口不用改变。如果用RequestParam则需要改变接口。

requestbody注解_json字符串_03

RequestBody 和 RequestParam

在前后端传json数据进行交互的时候,会经常用到的两个注解。

​@RequestBody​​和​​@RequestParam​​主要是用来接收前端传给后端的json数据。一般来说,​​@RequestBody​​注解一般使用在post请求中,因为前端将json数据放在了请求体中。在后端接收的方法里​​@RequestBody​​可以和​​@RequestParam​​同时使用,但一个方法里,​​@RequestBody​​只能有一个,​​@RequestParam​​可以有多个。​​@RequestParam​​使用在GET请求方式中,可以接收普通元素、数组、集合、对象等。

如果参数放在请求体中,传入后台需要用​​@RequestBody​​进行接收;如果不是放在请求体中的话,那么后台接收前台传过来的参数时,要用​​@RequestParam​​进行对应接收。

使用​​@RequestParam(xxx)​​,前端必须要有对应的xxx名字,可以通过设置reqired属性来调节是否必须传。

如果不写​​@RequestParam(xxx)的话​​,那么会自动匹配方法参数,如果命名不同会默认接收为空。

如果后端接收参数是一个对象,且该参数是用​​@RequestBody​​修饰的,那么前端json传数据,要满足:

  • 后端将http输入流装配到目标类时,会根据json字符串中的key来匹配对应实体类的属性,如果匹配一致且json中的key对应符合,那么后端能成功接收
  • json字符串中,如果value为""的话,后端对应属性如果是String类型的,那么接受到的就是"",如果后端对应的是引用类型Integer、Double等的话,那么就收的就是null
  • json字符串中,如果value为null的话,后端接收到的就是null
  • 如果某个参数没有value,在传json给后端的时候,要么干脆不该把盖子端写到json中,要么就给value赋值""或null

RequestBody 使用方法一

这里有​​Person​​类,对应属性有​​String name,Integer age​​,可以通过​​String​​来接收json串

RequestBody 使用方法二

可以使用对象来接收前端json串

Request 使用方法三

可以混合前二者使用,如果是复杂对象(类中组合了其他的类),可以使用对象接收,或者重写组合对象的​​toString()​​方法让其返回json串,从而使用字符串接收。

后端接受参数是一个对象的时候,如果类的属性定义值和json的key不对应,可以使用​​JsonAlias​​或者​​JsonProperty​​来进行更改指定。

ResponseBody

​@ResponseBody​​注解主要是用来返回json数据给前端,如果你很懒,只想返回一个对象,那么加上​​@ResponseBody​​可以实现将返回的对象自动转换为json传返回给前端。

在springboot中可以使用​​@RestController​​来代替​​@ResponseBody​​,如果不使用会报各种错(​​NumberFormatException...for input String​​)