JSON

Spring Boot 提供了与三个 JSON 映射库的集成:

  • Gson

  • Jackson

  • JSON-B

Jackson 是首选和默认库。

Jackson

提供了 Jackson 的自动配置,而 Jackson 是 spring-boot-starter-json 的一部分。当 Jackson 在类路径上时,将自动配置一个 ObjectMapper Bean。为 customizing the configuration of the ObjectMapper 提供了多个配置属性。

Custom Serializers and Deserializers

如果你使用 Jackson 对 JSON 数据进行序列化和反序列化,你可能需要编写自己的 JsonSerializer 类和 JsonDeserializer 类。自定义序列化器通常是 registered with Jackson through a module,但 Spring Boot 提供了一个替代的 @JsonComponent 批注,可以更容易地直接注册 Spring Bean。

你可以对 JsonSerializerJsonDeserializerKeyDeserializer 实现直接使用 @JsonComponent 批注。你还可以将其用于包含序列化器/反序列化器的类,这在以下示例中有所体现:

ApplicationContext 中的所有 @JsonComponent Bean 会自动向 Jackson 注册。由于 @JsonComponent 的元批注是 @Component,所以会应用通常的组件扫描规则。

Spring Boot 还会提供 {code-spring-boot-src}/jackson/JsonObjectSerializer.java[JsonObjectSerializer] 和 {code-spring-boot-src}/jackson/JsonObjectDeserializer.java[JsonObjectDeserializer] 基本类,在序列化对象时,这些类提供对标准 Jackson 版本的有用替代品。有关详细信息,请参阅 Javadoc 中的 JsonObjectSerializerJsonObjectDeserializer

上面的示例可以重新编写,这样使用 JsonObjectSerializer/JsonObjectDeserializer

Mixins

Jackson 支持 mixin,可用于将额外的批注混合到目标类已经声明的批注中。Spring Boot 的 Jackson 自动配置会扫描你的应用程序包来查找使用 @JsonMixin 批注的类,并将其向自动配置的 ObjectMapper 注册。注册是通过 Spring Boot 的 JsonMixinModule 执行的。

Gson

提供了 Gson 的自动配置。当 Gson 处于 classpath 上时,会自动配置一个 Gson Bean。提供了几个 spring.gson.* 配置属性来定制配置。为了获得更多控制,可以使用一个或多个 GsonBuilderCustomizer Bean。

JSON-B

提供了 JSON-B 的自动配置。当 JSON-B API 和一个实现位于 classpath 上时,将自动配置一个 Jsonb Bean。优选的 JSON-B 实现是 Eclipse Yasson,并为此提供了依赖项管理。