一.@RequestBody的作用
@RequestBody
主要用来接收前端传递给后端的json
字符串中的数据的(请求体中的数据的),所以只能发送POST请求。
GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交。
在后端的同一个接收方法里,@RequestBody与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个。
注:一个请求,只有一个RequestBody;一个请求,可以有多个RequestParam。
jQuery中,$.ajax()默认发送的参数类型及编码为:application/x-www-form-urlcoded
,而@RequestBody
处理的参数类型及编码为:aplication/json
或者是application/xml
,通过contentType
属性来指定
在传递之前,对JSON对象要使用JSON.stringify()
,JSON.stringify() 方法将一个 JavaScript 值(对象或者数组)转换为一个 JSON 字符串
后端@RequestBody注解对应的类在将HTTP的输入流(含请求体)装配到目标类(即:@RequestBody后面的类)时,会根据json字符串中的key来匹配对应实体类的属性,如果匹配一致且json中的该key对应的值
符合(或可转换为)实体类的对应属性的类型要求时,会调用实体类的setter方法将值赋给该属性。
注:当同时使用@RequestParam()和@RequestBody时,@RequestParam()指定的参数可以是普通元素、
数组、集合、对象等等(即:当,@RequestBody 与@RequestParam()可以同时使用时,原SpringMVC接收
参数的机制不变,只不过RequestBody 接收的是请求体里面的数据;而RequestParam接收的是key-value
里面的参数,所以它会被切面进行处理从而可以用普通元素、数组、集合、对象等接收)。
参考地址:@RequestBody的使用_justry_deng的博客-CSDN博客_@requestbody
二.实现案例
1.jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<script src="${pageContext.request.contextPath}/js/jquery.min.js"></script>
<script>
var userList=new Array();
userList.push({userName:"beijing",age:34});
userList.push({userName:"shanghai",age:89});
$.ajax({
type:"post",
url:"${pageContext.request.contextPath}/bike7",
data:JSON.stringify(userList),
contentType:"application/json;charset=utf-8",
success:function(result){
alert(result);
}
})
</script>
</head>
<body>
</body>
</html>
2.controller
/**
* @author liujianfu
* @description controller中业务方法的集合参数获取,要将集合参数封装到一个pojo中才可以
* 参数属性名与请求参数名称一致,参数值会自动映射匹配
* @date 2021/1/10 22:14
* @param
* @return
*/
@RequestMapping("/bike6")
public String bike6(){
System.out.println("controller6:");
return "ajax";
}
/**
* @author liujianfu
* @description controller中业务方法的集合参数获取,要将集合参数封装到一个pojo中才可以
* 参数属性名与请求参数名称一致,参数值会自动映射匹配
* @date 2021/1/10 22:14
* @param
* @return
*/
@RequestMapping("/bike7")
@ResponseBody
public String bike7(@RequestBody List<User> userList){
for(User u:userList){
System.out.println("user:"+u.getUserName());
}
return "ok";
}
3.spring-mvc 配置文件
4.页面访问