一.含义:
1.序列化:将java对象装换成json文件或者json字符串。
2.反序列化: 将json文件或者json字符串转换成java对象。
二.给大家举一个例子:
首先当前端我们传过来一个json对象的时候以axios为例:
- 通过axios 将json字符串转换为HTTP请求数据。
- HTTP请求将数据发送到服务器。
- 服务器接收到请求,并处理请求数据。
- 服务器将处理后的数据返回给axios。
- axios将服务器响应转换为json数据
- 前端接收到json数据并进行处理
三.这时候前端传递一个post类型的请求,后端接收请求通过@RequestBody注解把json转换成java对象(反序列化操作)eg:
四.序列化操作:
其实有一个注解@ResponseBody可以进行序列化操作。或者使用@RestController注解来完成最后的序列化返回给前端。(注意@RestController是@Controller+@ResponseBody)如果单个使用@ResponseBody 你需要额外使用@Controller注解(@Controller注解是Spring MVC 框架中的一个注解,主要用于标注控制器类。它表示该类的一个控制器,能够有效的接收外部请求,并根据请求参数、路径或其他处理方法,最终将业务处理结果封装成对象返回给前端页面)。
五.其实我们还有一种序列化和反序列化方法:利用jackson。
步骤一:导入以下依赖在pom文件里
<!-- JSON工具类 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency>
步骤二:首先创建一个ObjectMapper对象就是jackson的主要类
ObjectMapper objectMapper = new ObjectMapper();
以下就是方法二序列化操作举例:
public static void main(String[] args) {
CommodityRequest zz = new CommodityRequest();
zz.setName("xxx");
zz.setTime(new Date());
try {
ObjectMapper mapper = new ObjectMapper();
String serializationJson = mapper.writeValueAsString(zz);
System.out.println(">>>>>>>>>>>>>json:" + serializationJson);
} catch (Exception ex) {
ex.printStackTrace();
}
}
拓展1:其实可以研究一下HTTP 协议中的一个标头研究一下前端传参封装的原理:
拓展2:如何去除java对象转json中的null字段(setSerializationInclusion),如下:
public static void main(String[] args) {
CommodityRequest zz = new CommodityRequest();
zz.setName("xxx");
zz.setStudentName("");
zz.setTime(new Date());
try {
ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
String serializationJson = mapper.writeValueAsString(zz);
System.out.println(">>>>>>>>>>>>>json:" + serializationJson);
} catch (Exception ex) {
ex.printStackTrace();
}
}