《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

相关文章
|
安全 网络安全 开发工具
百度搜索:蓝易云【git无法使用git协议clone github仓库问题解决方法】
通过尝试以上解决方法,你应该能够解决无法使用Git协议克隆GitHub仓库的问题。选择适合你网络环境和要求的方法,并根据需要进行相应的配置。
956 2
|
网络协议 网络架构 Windows
【Windows】MCSM面板搭建Mycraft服务器,实现公网远程联机
【Windows】MCSM面板搭建Mycraft服务器,实现公网远程联机
1305 0
|
存储 缓存 JSON
微信小程序使用本地存储方法
微信小程序使用本地存储方法
920 1
|
6月前
|
人工智能 自然语言处理 监控
企业有哪些agent应用场景(2026年新版)
阿里云瓴羊推出企业级AI Agent解决方案,整合Quick Audience(智能营销)、Quick Service(情感化服务)、Quick BI(对话式BI)与Dataphin(自动驾驶数据治理),打通数据孤岛与业务断点,构建安全可控、跨场景协同的“数字员工团队”,赋能企业智能化升级。(239字)
|
Linux 网络安全 开发工具
Centos6.5安装并配置Telnet服务
该内容是一个关于如何安装配置Telnet服务的教程。首先,通过yum安装vim、xinetd、telnet和telnet-server。接着,修改/etc/xinetd.d/telnet配置文件,将disable改为no,并设置访问限制(如限定特定网段和时间)。关闭防火墙,重启服务。创建测试用户后,分别使用CentOS和Windows的Telnet客户端进行连接测试,显示成功,实验完成。
1082 1
|
存储 设计模式 Java
Java 基础知识全面总结及超详细要点整理
本内容详细总结了Java基础知识,涵盖语言概述、语法基础、流程控制、面向对象编程、集合框架、异常处理等核心知识点。从Java之父詹姆斯·高斯林到JVM内存模型,由浅入深解析Java特性与应用。重点包括类与对象、封装继承多态、ArrayList与HashMap的使用、异常分类与处理方式,以及字符串不可变性等关键概念。此外,还提供了代码示例和扩展知识点,如JVM内存模型、Lambda表达式等,助力开发者全面掌握Java编程。代码资源可从文末链接下载。
428 3
|
人工智能 自然语言处理 程序员
用通义灵码开发一个Python时钟:手把手体验AI程序员加持下的智能编码
通义灵码是基于通义大模型的AI研发辅助工具,提供代码智能生成、研发问答、多文件修改等功能,帮助开发者提高编码效率。本文通过手把手教程,使用通义灵码开发一个简单的Python时钟程序,展示其高效、智能的编码体验。从环境准备到代码优化,通义灵码显著降低了开发门槛,提升了开发效率,适合新手和资深开发者。最终,你将体验到AI加持下的便捷与强大功能。
|
Apache
crontab 每隔1小时 2小时的执行job写法
加任务:   crontab -e   0 */1 * * * command   0 */2 * * * command 查询任务是否加了:   crontab -l   0 */1 * * * command  0...
4239 0
|
自然语言处理 Windows
推荐给大家5款小众无广告的软件
本文推荐了几款小众且无广告的实用软件:ProcessExplorer 是一款强大的系统进程管理工具;LanguageTool 则是多语言语法检查工具;燃精灵用于检测微信空号;GeekUninstaller 可深度清理卸载软件残留;Win10Apps 专为管理 Windows10 应用而设计。感兴趣的朋友可以自行搜索下载。
634 17
C++从零基础到入门(2)—— (if、switch、for、while语句)
C++从零基础到入门(2)—— (if、switch、for、while语句)
C++从零基础到入门(2)—— (if、switch、for、while语句)