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

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

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



六、 JSON序列化技巧

 

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


1. 序列化对象

 

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


image.png

2. 序列化数组

 

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


image.png


3. 序列化集合

 

利用JSON.toJSONString方法序列化集合(继承至Collection,比如List、Set等集合):

image.png

 4. 序列化映射

 

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

image.png

其中,为了保证每次序列化的映射字符串一致,需要指定序列化参数MapSortField进行排序。

 

5. 序列化模板对象

 

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

image.png

6. 序列化指定属性字段

 

利用JSON.toJSONString方法序列化指定属性字段,主要通过设置属性预过滤器(SimplePropertyPreFilter)的包含属性字段列表(includes)实现。主要应用于只想验证某些字段的情况,比如只验证跟测试用例有关的字段。

 

1) 指定所有类的属性字段

 

利用JSON.toJSONString方法序列化指定所有类的属性字段:


image.png


2)指定单个类的属性字段


利用JSON.toJSONString方法序列化指定单个类的属性字段:

 

image.png

3) 指定多个类的属性字段

 

利用JSON.toJSONString方法序列化指定多个类的属性字段:


image.png

7.序列化字段排除属性字段


利用JSON.toJSONString方法序列化过滤属性字段,主要通过设置属性预过滤器(SimplePropertyPreFilter)的排除属性字段列表(excludes)实现。主要应用于不想验证某些字段的情况,比如排除无法验证的随机属性字段。

1)排除所有类的属性字段

利用JSON.toJSONString方法序列化排除所有类的属性字段:


image.png

2) 排除单个类的属性字段

 

利用JSON.toJSONString方法序列化排除单个类的属性字段:

image.png



3) 排除多个类的属性字段

 

利用JSON.toJSONString方法序列化排除多个类的属性字段:

image.png

8. 自定义序列化

 

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

 

1) 全局配置序列化器

 

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

 

image.png

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

 

2) 特定配置序列化器

 

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


image.png

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

 

3) 注解配置序列化器

 

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


image.png

 

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

 

9. 禁用对象自引用检测

 

如果实体类中存在对象自引用(即多个属性字段指向同一个对象引用),在利用JSON.toJSONString方法序列化会出现如下内容:


image.png

其中,属性字段addition指向了属性字段userInfo的属性字段additions的第1个对象。

 

但是,这样的JSON字符串,可能无法与我们提供的标准JSON字符串对比。这里,Fastjson提供了序列化参数SerializerFeature.DisableCircularReferenceDetect(禁用循环引用检测)来禁用这个功能。

image.png

注意:实体对象中千万不要存在对象循环引用的情况。



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

 

相关文章
|
14天前
|
IDE Java 测试技术
Java面试题:什么是Java中的单元测试以及如何编写单元测试?
Java面试题:什么是Java中的单元测试以及如何编写单元测试?
20 1
|
8天前
|
存储 JSON Java
Java对象转换为JSON字符串
在Java开发中,常需将数据对象转换为JSON存储,如使用Fastjson库。要将Java对象转为JSON,可调用`JSON.toJSONString(obj)`;反向转换则用`JSON.parseObject(str, Class)`。
|
14天前
|
IDE Java 测试技术
Java面试题:描述在Java中使用JUnit进行单元测试的过程
Java面试题:描述在Java中使用JUnit进行单元测试的过程
12 0
|
16天前
|
Java 测试技术 Maven
在Java项目中集成单元测试与覆盖率工具
在Java项目中集成单元测试与覆盖率工具
|
21天前
|
JSON Java 数据格式
前后端数据交换,JSON基础语法和JSON数据和Java对象转换,最快的对象转换,JSON{““}字符串如何写User{id=1,username=‘zhangsan‘,password=‘123‘}
前后端数据交换,JSON基础语法和JSON数据和Java对象转换,最快的对象转换,JSON{““}字符串如何写User{id=1,username=‘zhangsan‘,password=‘123‘}
|
24天前
|
存储 Java
JaveSE—IO流详解:对象输入输出流(序列化及反序列化)
JaveSE—IO流详解:对象输入输出流(序列化及反序列化)
|
27天前
|
JSON Java API
jackson序列化和反序列化中的注解和扩展点大全【收藏】
jackson序列化和反序列化中的注解和扩展点大全【收藏】
|
29天前
|
存储 JSON 数据库
Django REST framework关联序列化器详解:掌握复杂关系的序列化与反序列化艺术
Django REST framework关联序列化器详解:掌握复杂关系的序列化与反序列化艺术
|
1月前
|
网络协议 Java API
【Java】序列化和反序列化
【Java】序列化和反序列化
21 4
|
1月前
|
Java 数据安全/隐私保护 Android开发
Java基础21-读懂Java序列化和反序列化(二)
Java基础21-读懂Java序列化和反序列化(二)
99 1