如果使用Jackson对JSON数据进行序列化和反序列化,则可能需要编写自己的 JsonSerializer 和 JsonDeserializer 。自定义序列化程序通常通过模块向Jackson注册,但Spring Boot提供了一个可选的@JsonComponent注释,使直接注册SpringBean更加容易。

您可以直接在 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版本提供了有用的替代方案。有关详细信息,请参见javadoc中的JsonObjectSerializer和 JsonObjectDeserializer。