《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

相关文章
|
存储 Linux Shell
Linux绝对路径和相对路径
在 Linux 中,简单的理解一个文件的路径,指的就是该文件存放的位置。 只要我们告诉 Linux 系统某个文件存放的准确位置,那么它就可以找到这个文件。指明一个文件存放的位置,有 2 种方法,分别是使用绝对路径和相对路径。 我们知道,Linux 系统中所有的文件(目录)都被组织成以根目录“/”开始的倒置的树状结构 绝对路径一定是由根目录 / 开始写起。例如,使用绝对路径的表示方式指明 bin 文件所在的位置,该路径应写为 /usr/bin,测试代码如下: [root@localhost ~]# bin bash: bin: command not found <-- 没有找到 [
526 0
|
存储 缓存 JSON
微信小程序使用本地存储方法
微信小程序使用本地存储方法
642 1
|
3月前
|
存储 机器学习/深度学习 弹性计算
阿里云服务器租用价格参考:2核4G/4核8G/8核16G价格与选型指南
阿里云服务器2核4G、4核8G、8核16G配置价格参考,目前,2核4G配置按量收费最低0.225元/小时,包年包月平均月价最低47.52元,按年购买u1实例2核4G5M带宽仅需199元且续费不涨价;4核8G配置按量收费最低降至0.45元/小时,包年包月平均月价最低159.84元;8核16G配置按量收费最低0.9元/小时,按月租用平均月价最低319.68元。云服务器实例规格和配置不同,收费标准与活动价格也不同,本文将为您介绍这三大配置的收费标准、活动价格及选型策略,以供选择参考。
IntelliJ IDEA热部署插件JRebel免费激活图文教程
首先说下热部署是什么意思吧,简单了说就是在我们对代码进行更改之后,不需要重启项目,重新编译一下就可以直接运行最新的代码的部署方式。既然是部署方式,项目启动部署的时候当然就会和正常情况下不一样啦~
IntelliJ IDEA热部署插件JRebel免费激活图文教程
|
SQL 关系型数据库 MySQL
springboot项目操作mysql出现锁表问题情况
springboot项目操作mysql出现锁表问题情况
185 2
|
自然语言处理 Windows
推荐给大家5款小众无广告的软件
本文推荐了几款小众且无广告的实用软件:ProcessExplorer 是一款强大的系统进程管理工具;LanguageTool 则是多语言语法检查工具;燃精灵用于检测微信空号;GeekUninstaller 可深度清理卸载软件残留;Win10Apps 专为管理 Windows10 应用而设计。感兴趣的朋友可以自行搜索下载。
431 17
[java进阶]——stream流你还不会用吗?超详细使用介绍
[java进阶]——stream流你还不会用吗?超详细使用介绍
359 0
|
存储 数据可视化 索引
Grafana 系列 - 统一展示 -7-ElasticSearch 数据源
Grafana 系列 - 统一展示 -7-ElasticSearch 数据源
|
存储 开发框架 .NET
WPF+ASP.NET SignalR实现后台通知
WPF+ASP.NET SignalR实现后台通知
310 0
|
vr&ar 图形学
【Unity 3D】VR飞机起飞喷火游戏案例实战(附源码和演示视频 超详细)
【Unity 3D】VR飞机起飞喷火游戏案例实战(附源码和演示视频 超详细)
632 0