一.序列化与反序列化简介
1.概述
通过上一章节,我们学习到,在SpringMVC框架中使用HttpMessageConverter转换器类来转换http请求和响应。
HttpMessageConverter在转换http请求和响应的过程中,就需要将对象转为json,也就是序列化;或者将json转为对象,也就是反序列化。
2.@JsonComponent注解
在Spring Boot中默认是使用Jackson进行序列化和反序列化JSON数据的,那么除了可以用默认的之外,我们也可以编写自己的JsonSerializer和JsonDeserializer类,来进行自定义操作。
自定义序列化器(serializers)通常是通过Module方式注册到Jackson中,但在Spring Boot中提供了@JsonComponent注解这一替代方式,它能帮我们更为轻松的将序列化器注册为Spring Beans。
我们可以直接在JsonSerializer 或 JsonDeserializer类上使用 @JsonComponent注解,该注解允许我们将带该注解的类公开为Jackson序列化器或反序列化器,而无需再手动将其添加到ObjectMapper。我们还可以在包含序列化程序/反序列化程序作为内部类的类上使用它,如下例所示:
import java.io.*;
import com.fasterxml.jackson.core.*;
import com.fasterxml.jackson.databind.*;
import org.springframework.boot.jackson.*;
@JsonComponent
public class Example {
public static class Serializer extends JsonSerializer<SomeObject> {
// ...
}
public static class Deserializer extends JsonDeserializer<SomeObject> {
// ...
}
}
ApplicationContext 中的所有 @JsonComponent bean都会自动注册到Jackson。因为 @JsonComponent 是用 @Component进行注解的,所以应用通常的组件扫描规则。
SpringBoot还提供了JsonObjectSerializer和JsonObjectDeserializer 基类,它们在序列化对象时为标准的Jackson版本提供了有用的替代方案。
二.序列化与反序列化实现
1.创建新项目
为了讲解序列化与反序列化的实现,我们创建一个新的工