27.1.3. 自定义JSON序列化器和反序列化器

如果使用Jackson序列化,反序列化JSON数据,你可能想编写自己的JsonSerializerJsonDeserializer类。自定义序列化器(serializers)通常通过Module注册到Jackson,但Spring Boot提供了@JsonComponent注解这一替代方式,它能轻松的将序列化器注册为Spring Beans。

你可以在JsonSerializer或者JsonDeserializer的实现上,直接使用@JsonComponent注解。你也可以在以内部类的形式包含序列化器/反序列化器的类上使用它,如下所示:

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进行元注解,会应用通常的组件扫描规则。

Spring Boot也提供了JsonObjectSerializerJsonObjectDeserializer基础类。它们为标准的Jackson版本提供了替代选择。详情请查看JsonObjectSerializerJsonObjectDeserializer的Javadoc。