SpringCore完整学习教程5,入门级别

这篇具有很好参考价值的文章主要介绍了SpringCore完整学习教程5,入门级别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本章从第6章开始

6. JSON

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

  • Gson

  • Jackson

  • JSON-B

Jackson是首选的和默认的库。

6.1. Jackson

为Jackson提供了自动配置,Jackson是spring-boot-starter-json的一部分。当Jackson在类路径上时,将自动配置ObjectMapper bean。提供了几个配置属性来定制ObjectMapper的配置。

6.1.1. Custom Serializers and Deserializers

如果您使用Jackson来序列化和反序列化JSON数据,您可能希望编写自己的JsonSerializer和JsonDeserializer类。自定义序列化器通常通过模块在Jackson中注册,但是Spring Boot提供了另一种@JsonComponent注释,可以更容易地直接注册Spring bean。
你可以直接在JsonSerializer、JsonDeserializer或KeyDeserializer的实现上使用@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);
        }

    }

}

我测试一下,MyObject类:

package com.example.demo.demos;

public class MyObject {
    String name;
    int age;

    public MyObject() {
    }

    public MyObject(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

测试代码:

 @Test
    public void testSerialize() throws Exception {
        MyObject myObject = new MyObject("John", 30);
        ObjectMapper objectMapper = new ObjectMapper();
        String json = objectMapper.writeValueAsString(myObject);
        System.out.println(json);
    }

结果输出为:

SpringCore完整学习教程5,入门级别,学习,springboot,spring,spring boot,java

话说,我每次都测试,各位真不打算关注一下吗?

测试反序列化:

 @Test
    public void testDeserialize() throws Exception {
        String json = "{\"name\":\"John\",\"age\":30}";
        ObjectMapper objectMapper = new ObjectMapper();
        MyObject myObject = objectMapper.readValue(json, MyObject.class);
        assertEquals("John", myObject.getName());
        assertEquals(30, myObject.getAge());  

结果输出:没有问题,这个assertEquals方法就是判断两个参数的值是否相等。

ApplicationContext中的所有@JsonComponent bean都会自动注册到Jackson。因为@JsonComponent是用@Component做元注释的,所以应用了通常的组件扫描规则。
Spring Boot还提供了JsonObjectSerializer和JsonObjectDeserializer基类,它们在序列化对象时为标准Jackson版本提供了有用的替代方案。

上面的例子可以重写为使用JsonObjectSerializer/JsonObjectDeserializer,如下所示:

@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);
        }

    }

}
6.1.2. Mixins

Jackson支持mixins,可以用来将额外的注解混合到目标类中已经声明的注解中。Spring Boot的Jackson自动配置将扫描应用程序包中带有@JsonMixin注释的类,并将它们注册到自动配置的ObjectMapper中。注册由Spring Boot的JsonMixinModule执行。

6.2. Gson

为Gson提供了自动配置。当Gson在类路径上时,会自动配置一个Gson bean。几个spring.gson。* configuration属性用于自定义配置。为了获得更多的控制,可以使用一个或多个GsonBuilderCustomizer bean。

6.3. JSON-B

提供了JSON-B的自动配置。当JSON-B API和实现在类路径上时,将自动配置一个json bean。首选的JSON-B实现是为其提供依赖管理的Apache Johnzon文章来源地址https://www.toymoban.com/news/detail-716843.html

到了这里,关于SpringCore完整学习教程5,入门级别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Java基础教程】Java学习路线攻略导图——史诗级别的细粒度归纳 ~

    🍺🍺 各位读者朋友大家好!得益于各位朋友的支持和关注,我的专栏《Java基础教程》 至今已经更新完毕,我们一起探索了Java语言的许多核心概念和重要特性。在过去的文章中,我们 一共涉及了入门知识介绍、编程基础概念、面向对象OOP、包及访问控制权限、异常处理篇、

    2024年02月14日
    浏览(38)
  • 【Java基础教程】Java学习路线攻略导图——史诗级别的细粒度归纳,持续更新中 ~

    🍺🍺 各位读者朋友大家好!得益于各位朋友的支持和关注,我的专栏《Java基础教程》 至今已经更新完毕,我们一起探索了Java语言的许多核心概念和重要特性。在过去的文章中,我们 一共涉及了入门知识介绍、编程基础概念、面向对象OOP、包及访问控制权限、异常处理篇、

    2024年02月16日
    浏览(34)
  • 完整教程:深度学习环境配置(GPU条件&pytorch)

    如果是python小白,强烈推荐B站小土堆的视频,讲得很清晰(但需要花些时间),地址如下: 最详细的 Windows 下 PyTorch 入门深度学习环境安装与配置 CPU GPU 版 如果有些基础,跟着往下看就行。 配置 作用 Anaconda 灵活切换python运行环境、高效使用python包 GPU 软硬件:硬件基础(

    2024年02月15日
    浏览(31)
  • springboot的缓存和redis缓存,入门级别教程

    一、springboot(如果没有配置)默认使用的是jvm缓存 1、Spring框架支持向应用程序透明地添加缓存。抽象的核心是将缓存应用于方法,从而根据缓存中可用的信息减少执行次数。缓存逻辑是透明地应用的,对调用者没有任何干扰。只要使用@EnableCaching注释启用了缓存支持,Spri

    2024年02月07日
    浏览(40)
  • 如何学习python自动化测试,这是我见过最完整的教程了

    目录 前言 一、 学习Python基础知识 二、 学习自动化测试框架 三、 学习Web自动化测试 四、 学习移动端自动化测试 五、 学习版本控制工具 六、 学习测试管理工具 七、 实践总结 Python自动化测试是目前比较流行的一种自动化测试技术。它具有开发效率高、可扩展性强、应用广

    2024年01月19日
    浏览(30)
  • Python基础(适合初学-完整教程-学习时间一周左右-节约您的时间)

    Python基础——核心文章        本系列博客所有内容都是【 实际操作 】为主,部分内容一定要解释说明的会伴随少量的理论说明,在【 最短时间内 】让大家【 掌握 】真正的【 实操技能 】才是实打实的【 为您创造价值 】。 系统版本:win10、win11 开发工具:PyCharm Community社

    2024年02月19日
    浏览(26)
  • 【云计算学习教程】一套完整的云计算产品需要解决哪些问题?_云计算教学问题(1)

    先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7 深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前! 因此收集整理了一份《2024年最新大数据全套学习资料》,

    2024年04月17日
    浏览(35)
  • Django实战:部署项目 【资产管理系统】,Django完整项目学习研究(项目全解析,部署教程,非常详细)

    关于Django,我已经和大家分享了一些知识,考虑到一些伙伴需要在实际的项目中去理解。所以我上传了一套Django的项目学习源码,已经和本文章进行了绑定。大家可以自行下载学习,考虑到一些伙伴是初学者,几年前,编者也是从初学者一路学习到现在。当时,很希望有一套

    2024年02月20日
    浏览(29)
  • 0基础学习VR全景平台篇第38章:场景功能-AI虚拟人实操完整教程

    AI虚拟人功能正式上线!   依托“虚拟数字人引擎”结合VR全景,为各行各业提供虚拟形象生成、驱动、交互服务,帮助海量用户的VR全景作品,打造成为更具沉浸感的VR交互项目,提升作品变现能力。 功能位置示意 一、什么是AI虚拟人?   AI虚拟人是指,通过蛙色VR系统生成

    2024年02月09日
    浏览(35)
  • Elasticsearch 学习+SpringBoot实战教程(三)

    需要学习基础的可参照这两文章 Elasticsearch 学习+SpringBoot实战教程(一) Elasticsearch 学习+SpringBoot实战教程(一)_桂亭亭的博客-CSDN博客 Elasticsearch 学习+SpringBoot实战教程(二)   Elasticsearch 学习+SpringBoot实战教程(二)_桂亭亭的博客-CSDN博客 前言: 经过了前面2课的学习我们

    2023年04月09日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包