处理json数据需要使用jackson包:jackson-core、jackson-databind、jackson-annotations
pom.xml
<!--引入json的依赖-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.0</version>
</dependency>
</dependencies>
一、@RequestBody
@RequestBody注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter接口将读到的内容(json数据)转换为java对象并绑定到Controller方法的参数上。
1. 未使用@RequestBody
http请求的内容,每个请求字段被controller 一对一的接收
index.jsp
<%@ page isELIgnored="false" contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<input type="button" value="点击" onclick="execute()"/>
</body>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery.min.js"></script>
<script type="text/javascript">
function execute() {
$.ajax({
url:"${pageContext.request.contextPath}/user/testRequestJson",
data:{"username":"zhangsan","age":20},
type:"post",
dataType:"json",
success:function(data){
}
});
}
</script>
</html>
UserController.java
@RequestMapping("/testRequestJson")
public void testRequestJson(String username ,Integer age){
System.out.println(username);
System.out.println(age);
}
2.使用@RequestBody将http请求的json数据转换为字符串
@RequestBody注解将http请求的json数据转换为字符串
index.jsp
<%@ page isELIgnored="false" contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<input type="button" value="点击" onclick="execute()"/>
</body>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery.min.js"></script>
<script type="text/javascript">
function execute() {
$.ajax({
url:"${pageContext.request.contextPath}/user/testRequestJson",
data:{"username":"zhangsan","age":20},
type:"post",
dataType:"json",
success:function(data){
}
});
}
</script>
</html>
UserController.java
@RequestMapping("/testRequestJson2")
public void testRequestJson2(@RequestBody String body){ //使用@RequestBody将http请求的json数据转换为字符串
System.out.println(body);
}
3.使用@RequestBody将http请求的json数据转换为java对象进行绑定
User.java
public class User {
private Integer id;
private String username;
private String sex;
}
index.jsp
JSON.stringify()用于将 JavaScript 值转换为 JSON 字符串。
<%@ page isELIgnored="false" contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<input type="button" value="点击" onclick="execute()"/>
</body>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery.min.js"></script>
<script type="text/javascript">
function execute() {
$.ajax({
url:"${pageContext.request.contextPath}/user/testRequestJson3",
data:JSON.stringify({"username":"zhangsan","sex":"男"}),
type:"post",
//json字符串必须设置
contentType:'application/json;charset=utf-8',
dataType:"json",
success:function(data){
}
});
}
</script>
</html>
UserController.java
@RequestMapping("/testRequestJson3")
public void testRequestJson3(@RequestBody User user){ //使用@RequestBody将http请求的json数据转换为java对象进行绑定
System.out.println(user);
}
点击提交后,后台结果为:
二、@ResponseBody
@ResponseBody注解用于将Controller的方法返回的对象,通过springmvc提供的HttpMessageConverter接口转换为指定格式的数据如:json,xml等,通过Response响应给客户端。
UserController.java
@RequestMapping("/testResponseBody")
@ResponseBody
public List<User> testResponseBody(){
List<User> userList = new ArrayList<>();
User user = new User();
user.setUsername("zhangsan");
user.setSex("男");
user.setId(2);
User user1 = new User();
user1.setUsername("wangwu");
user1.setSex("女");
user1.setId(1);
userList.add(user);
userList.add(user1);
return userList;
}
index.jsp
<%@ page isELIgnored="false" contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<input type="button" value="点击" onclick="execute()"/>
</body>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery.min.js"></script>
<script type="text/javascript">
function execute() {
$.ajax({
url:"${pageContext.request.contextPath}/user/testResponseBody",
data:{},
type:"post",
dataType:"json",
success:function(data){
alert(data)
alert(data[0].username);
alert(data[1].username);
}
});
}
</script>
</html>
点击【点击】按钮后,依次弹出3个提示框。