27.1.3 Custom JSON Serializers and Deserializers
如果使用Jackson序列化,反序列化JSON数据,你可能想编写自己的JsonSerializer和JsonDeserializer类。自定义序列化器(serializers)通常通过Module注册到Jackson,但Spring Boot提供了@JsonComponent注解这一替代方式,它能轻松的将序列化器注册为Spring Beans。
你可以使用@JsonComponent直接注释在 JsonSerializer 或 JsonDeserializer实现上,这样就算注册了,也可以在包含serializers/deserializers作为其内部类的类上使用该注解,如:
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注解了(meta-annotated),因此也应用于组件扫描(component-scanning)规则
Spring Boot自身还提供了 JsonObjectSerializer和JsonObjectDeserializer这两个base classes,这两个基类在处理序列化时为Jackson标准版提供有用的替代方案,具体参见javadoc。