《Java单元测试实战》——编写技巧:Java单元测试技巧之JSON序列化(9)

简介: 《Java单元测试实战》——编写技巧:Java单元测试技巧之JSON序列化(9)

《Java单元测试实战》——编写技巧:Java单元测试技巧之JSON序列化(8) https://developer.aliyun.com/article/1232280?groupCode=java



七、 JSON反序列化技巧

 

这里以Fastjson为例,介绍一些JSON反序列化技巧。

 

1. 反序列化对象

 

利用JSON.parseObject方法反序列化对象:

 

image.png

2. 反序列化数组

 

利用JSON.parseObject方法反序列化数组:

image.png

3. 反序列化集合

 

利用JSON.parseArray方法反序列化列表:

image.png

 

利用JSON.parseObject方法反序列化集合:

image.png


4. 反序列化映射

 

利用JSON.parseObject方法反序列化映射:


image.png

注意:如果映射的key是复杂类型,这种方法反序列会报格式错误,需要自定义反序列化器。

 

5. 反序列化模板对象

 

利用JSON.parseObject方法反序列化模板对象:

image.png

6. 反序列化非公有字段

 

由于某些属性字段没有公有设置方法,或者以字段名称作为公有设置方法。当需要反序列化这些属性字段时,需要指定SupportNonPublicField(支持非公有字段)反序列化参数。

image.png

7. 反序列化Builder模式类

 

有些同学喜欢用Builder模式,导致实体类并没有公有构造方法。当利用Fastjson反序列化这些类是,就会出现以下问题:

 

image.png

 

只要对应的Builder类有默认构造方法,就可以采用下面的方式序列化。

image.png

首先通过JSON.parseObject方法+SupportNonPublicField参数反序列化Builder对象,然后通过Builder对象的build方法来构造实体对象。

 

如果对应的Builder类没有默认构造方法,或者需要反序列化模板对象时,需要自定义JSON反序列化器。

 

8. 反序列化丢失字段值

 

Fastjson支持没有默认构造方法的类的反序列化,但存在丢失字段值的问题。


image.png

咨询过Fastjson维护人员,目前还没有解决这个bug,有待后续版本中解决。如果要反序列化这种类,可以考虑添加默认构造方法或自定义反序列化器。

 

9. 自定义反序列化器

 

对应一些类对象,需要把特殊格式文本反序列化为对象,就必须自定义反序列化器。比如:Geometry序列化文本,通常采用WKT(Well-known text)表示,便于用户快速阅读理解。


1) 全局配置反序列化器

 

通过JSON序列化全局配置指定类反序列化器:

image.png

注意:这种方式不支持类继承,必须指定到具体类。比如要序列化Point对象,就必须配置Point类的反序列化器。

 

2) 特定配置反序列化器

 

通过JSON序列化特定配置指定类反序列化器:


image.png

注意:这种方式不支持类继承,必须指定到具体类。比如要序列化Point对象,就必须配置Point类的反序列化器。

 

3) 注解配置反序列化器

 

通过JSON序列化注解配置指定类反序列化器:


image.png

 

其中:GeometryDeserializer为自定义类,这里就不贴出具体实现了。


 

《Java单元测试实战》——编写技巧:Java单元测试技巧之JSON序列化(10) https://developer.aliyun.com/article/1232278?groupCode=java

目录
打赏
0
0
0
0
52
分享
相关文章
某互联网大厂亿级大数据服务平台的建设和实践
某互联网大厂亿级大数据服务平台的建设和实践
651 0
Spark - 一文搞懂 parquet
parquet 文件常见于 Spark、Hive、Streamin、MapReduce 等大数据场景,通过列式存储和元数据存储的方式实现了高效的数据存储与检索,下面主要讲parquet 文件在 spark 场景下的存储,读取与使用中可能遇到的坑。......
2678 0
Spark - 一文搞懂 parquet
如何构建高效稳定的Java数据库连接池,涵盖连接池配置、并发控制和异常处理等方面
本文介绍了如何构建高效稳定的Java数据库连接池,涵盖连接池配置、并发控制和异常处理等方面。通过合理配置初始连接数、最大连接数和空闲连接超时时间,确保系统性能和稳定性。文章还探讨了同步阻塞、异步回调和信号量等并发控制策略,并提供了异常处理的最佳实践。最后,给出了一个简单的连接池示例代码,并推荐使用成熟的连接池框架(如HikariCP、C3P0)以简化开发。
234 2
Linux objdump命令:深入解析与实战应用
`objdump`是Linux下的反汇编工具,用于将二进制文件转换为汇编代码,便于理解程序底层。它可以反汇编目标文件、可执行文件和库,支持多种参数,如显示符号表(-t)、反汇编代码(-d)、源代码与汇编混合视图(-S)。在实践中,结合-g编译选项和特定段(-j)反汇编,能辅助调试和分析。使用时注意包含调试信息,选择适当参数,并与其他工具(如gdb)配合使用。
MyBatis配置与映射文件深度解析
这样在映射文件中就可以使用简短的别名User代替完整的类名com.example.User。
780 0
java202303java学习笔记第四十天mysql安装initialize specified but the data directory has files in it. Aborting
java202303java学习笔记第四十天mysql安装initialize specified but the data directory has files in it. Aborting
303 0
Python|基于粒子群和遗传算法的微电网优化调度
Python|基于粒子群和遗传算法的微电网优化调度
280 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等