网站建设需要租用什么,网页模板之家免费下载,金融网站建设方案书,做网站没有做退钱本文为官方文档直译版本。原文链接 Spring Boot JSON中文文档 引言Jackson自定义序列化器和反序列化器混入 GsonJSON-B 引言
Spring Boot 提供与三个 JSON 映射库的集成#xff1a;
GsonJacksonJSON-B
Jackson 是首选的默认库。
Jackson
Spring-boot-starter-json 提供了… 本文为官方文档直译版本。原文链接 Spring Boot JSON中文文档 引言Jackson自定义序列化器和反序列化器混入 GsonJSON-B 引言
Spring Boot 提供与三个 JSON 映射库的集成
GsonJacksonJSON-B
Jackson 是首选的默认库。
Jackson
Spring-boot-starter-json 提供了 Jackson 的自动配置功能Jackson 也是 Spring-boot-starter-json 的一部分。当 Jackson 位于类路径上时会自动配置 ObjectMapper Bean。为自定义 ObjectMapper 的配置提供了多个配置属性。
自定义序列化器和反序列化器
如果使用 Jackson 来序列化和反序列化 JSON 数据您可能需要编写自己的 JsonSerializer 和 JsonDeserializer 类。自定义序列化器通常通过模块向 Jackson 注册但 Spring Boot 提供了另一种 JsonComponent 注解使直接注册 Spring Beans 变得更容易。 您可以在 JsonSerializer、JsonDeserializer 或 KeyDeserializer 实现中直接使用 JsonComponent 注解。也可以在包含序列化器/解序列化器作为内部类的类中使用如下例所示
import java.io.IOException;import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.ObjectCodec;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;import org.springframework.boot.jackson.JsonComponent;JsonComponent
public class MyJsonComponent {public static class Serializer extends JsonSerializerMyObject {Overridepublic void serialize(MyObject value, JsonGenerator jgen, SerializerProvider serializers) throws IOException {jgen.writeStartObject();jgen.writeStringField(name, value.getName());jgen.writeNumberField(age, value.getAge());jgen.writeEndObject();}}public static class Deserializer extends JsonDeserializerMyObject {Overridepublic MyObject deserialize(JsonParser jsonParser, DeserializationContext ctxt) throws IOException {ObjectCodec codec jsonParser.getCodec();JsonNode tree codec.readTree(jsonParser);String name tree.get(name).textValue();int age tree.get(age).intValue();return new MyObject(name, age);}}}ApplicationContext 中的所有 JsonComponent Bean 都会自动向 Jackson 注册。由于 JsonComponent 是用 Component 元标注的因此通常的组件扫描规则也适用。 Spring Boot 还提供了 [JsonObjectSerializer](https://github.com/spring-projects/spring-boot/blob/v3.2.0/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/jackson/JsonObjectSerializer.java) 和 JsonObjectDeserializer 基类在序列化对象时它们为标准的 Jackson 版本提供了有用的替代方法。有关详细信息请参见 Javadoc 中的 JsonObjectSerializer 和 JsonObjectDeserializer。 上面的示例可以重写为使用 JsonObjectSerializer/JsonObjectDeserializer 如下
import java.io.IOException;import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.ObjectCodec;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.SerializerProvider;import org.springframework.boot.jackson.JsonComponent;
import org.springframework.boot.jackson.JsonObjectDeserializer;
import org.springframework.boot.jackson.JsonObjectSerializer;JsonComponent
public class MyJsonComponent {public static class Serializer extends JsonObjectSerializerMyObject {Overrideprotected void serializeObject(MyObject value, JsonGenerator jgen, SerializerProvider provider)throws IOException {jgen.writeStringField(name, value.getName());jgen.writeNumberField(age, value.getAge());}}public static class Deserializer extends JsonObjectDeserializerMyObject {Overrideprotected MyObject deserializeObject(JsonParser jsonParser, DeserializationContext context, ObjectCodec codec,JsonNode tree) throws IOException {String name nullSafeValue(tree.get(name), String.class);int age nullSafeValue(tree.get(age), Integer.class);return new MyObject(name, age);}}}混入
Jackson 支持混入注解可用于将附加注解混合到目标类已声明的注解中。Spring Boot 的 Jackson 自动配置会扫描应用程序的包查找注释为 JsonMixin 的类并将它们注册到自动配置的 ObjectMapper 中。注册由 Spring Boot 的 JsonMixinModule 执行。
Gson
为 Gson 提供了自动配置功能。当 Gson 位于类路径上时Gson Bean 会自动配置。为自定义配置提供了多个 spring.gson.* 配置属性。要进行更多控制可以使用一个或多个 GsonBuilderCustomizer Bean。
JSON-B
提供 JSON-B 的自动配置。当 JSON-B API 和实现位于类路径上时Jsonb Bean 将自动配置。首选的 JSON-B 实现是 Eclipse Yasson它提供了依赖关系管理。