Spring Boot JSON中文文档

如果你不相信努力和时光,那么成果就会是第一个选择辜负你的。不要去否定你自己的过去,也不要用你的过去牵扯你现在的努力和对未来的展望。不是因为拥有希望你才去努力,而是去努力了,你才有可能看到希望的光芒。Spring Boot JSON中文文档,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

本文为官方文档直译版本。原文链接

引言

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

  • Gson
  • Jackson
  • JSON-B

Jackson 是首选的默认库。

Jackson

Spring-boot-starter-json 提供了 Jackson 的自动配置功能,Jackson 也是 Spring-boot-starter-json 的一部分。当 Jackson 位于类路径上时,会自动配置 ObjectMapper Bean。为自定义 ObjectMapper 的配置提供了多个配置属性。

自定义序列化器和反序列化器

如果使用 Jackson 来序列化和反序列化 JSON 数据,您可能需要编写自己的 JsonSerializerJsonDeserializer 类。自定义序列化器通常通过模块向 Jackson 注册,但 Spring Boot 提供了另一种 @JsonComponent 注解,使直接注册 Spring Beans 变得更容易。
您可以在 JsonSerializerJsonDeserializerKeyDeserializer 实现中直接使用 @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 JsonSerializer<MyObject> {

        @Override
        public 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 JsonDeserializer<MyObject> {

        @Override
        public 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 中的 JsonObjectSerializerJsonObjectDeserializer
上面的示例可以重写为使用 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 JsonObjectSerializer<MyObject> {

        @Override
        protected 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 JsonObjectDeserializer<MyObject> {

        @Override
        protected 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,它提供了依赖关系管理。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/195196.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!