第一次接触JSON对象还是在:后端接收前端请求后向前端反应一个集合或者对象,由于前端所接收的类型是JSON,如果我们返回的类型是String,即可以直接返回,如果是自定义类型,就不能直接返回了,要引入jackson依赖,使用其类ObjectMapper中的writeValue或者writeValuesAsString方法将自定义类型转换成JSON对象格式,从而就可以返回给前端了
jackson
1.引入依赖
代码使用(Java对象转Json Json转Java对象)
后端:
public class draft {
static class User{
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
public void str(HttpServletRequest req,HttpServletResponse resp) throws JsonProcessingException {
//jackson自带的类---ObjectMapper
ObjectMapper objectMapper = new ObjectMapper();
//将自定义类型对象转换为JSON格式对象
User user = new User();
user.setPassword("123");
user.setUsername("zhangsan");
String strJson = objectMapper.writeValueAsString(user);
//值得注意的是 前端拿到响应对象后解析,是通过User类中的get方法来获取值的(getPassword getUsername)
//所以实体类中要重写setter和getter方法,且不能出差错
//将JSON格式对象转换成Java自定义对象
User user1 = objectMapper.readValue(req.getInputStream(),User.class);
}
}
前端:
<script src="./jquery.min.js"></script>
<script>
function getAllInfo() {
$.ajax({
type: 'get',
url: '/allinfo',
success: function (body) {
//得到服务器响应后的Json对象了
for (let stu of body) {
myfunction(body);
}
}
})
}
function myfunction(arr){
let out = "";
for(let i = 0; i < arr.length; i++){
out += "<tr>"
+ "<td>"+arr[i].name+"</td>"
+"<td>"+arr[i].age+"</td>"
+"<td>"+arr[i].gender+"</td>"
+"<td>"+arr[i].cls+"</td>"
+"</tr>";
}
document.getElementById("content").innerHTML=out;
}
getAllInfo();
</script>
从上述代码中我们可以得到几个关键点:
1.当后端响应完前端所发送的请求后,返回Json格式数据给前端后,前端会自动将JSON格式对象解析成JS对象,且拿对象里的属性(arr[i].name)是根据类中的get方法获取的,所以当你类中没有写getter和setter方法时,会出问题
2.在JSON对象转Java对象时,我们可以将其细分为以下几步
- 从回显函数的body参数中得到Json格式的字符串{username:"zhangsan",password:"123"}
- 根据readValue中的第二个参数类对象来创建一个同类型的Java(User.class)
- 解析上述Json格式,处理成map键值对形式
- 遍历所有键值对,看键的名字和实例类中的属性名哪一个是相同的,相同的话就把对于的value设置到该属性中
- 返回该实体类
3.在spring框架下内置了jackson,所以无须使用ObjectMapper类的方法将其转化成JSON对象,会自动转换