《Java单元测试实战》——编写技巧:Java单元测试技巧之JSON序列化(7) https://developer.aliyun.com/article/1232281?groupCode=java
六、 JSON序列化技巧
这里以Fastjson为例,介绍一些JSON序列化技巧。
1. 序列化对象
利用JSON.toJSONString方法序列化对象:
2. 序列化数组
利用JSON.toJSONString方法序列化数组:
3. 序列化集合
利用JSON.toJSONString方法序列化集合(继承至Collection,比如List、Set等集合):
4. 序列化映射
利用JSON.toJSONString方法序列化映射:
其中,为了保证每次序列化的映射字符串一致,需要指定序列化参数MapSortField进行排序。
5. 序列化模板对象
利用JSON.toJSONString方法序列化模板对象:
6. 序列化指定属性字段
利用JSON.toJSONString方法序列化指定属性字段,主要通过设置属性预过滤器(SimplePropertyPreFilter)的包含属性字段列表(includes)实现。主要应用于只想验证某些字段的情况,比如只验证跟测试用例有关的字段。
1) 指定所有类的属性字段
利用JSON.toJSONString方法序列化指定所有类的属性字段:
2)指定单个类的属性字段
利用JSON.toJSONString方法序列化指定单个类的属性字段:
3) 指定多个类的属性字段
利用JSON.toJSONString方法序列化指定多个类的属性字段:
7.序列化字段排除属性字段
利用JSON.toJSONString方法序列化过滤属性字段,主要通过设置属性预过滤器(SimplePropertyPreFilter)的排除属性字段列表(excludes)实现。主要应用于不想验证某些字段的情况,比如排除无法验证的随机属性字段。
1)排除所有类的属性字段
利用JSON.toJSONString方法序列化排除所有类的属性字段:
2) 排除单个类的属性字段
利用JSON.toJSONString方法序列化排除单个类的属性字段:
3) 排除多个类的属性字段
利用JSON.toJSONString方法序列化排除多个类的属性字段:
8. 自定义序列化
对应一些类对象,需要序列化为特殊格式文本,就必须自定义序列化器。比如:Geometry序列化文本,通常采用WKT(Well-known text)表示,便于用户快速阅读理解。
1) 全局配置序列化器
通过JSON序列化全局配置指定类序列化器:
注意:这种方式不支持类继承,必须指定到具体类。比如要序列化Point对象,就必须配置Point类的序列化器。
2) 特定配置序列化器
通过JSON序列化特定配置指定类序列化器:
注意:这种方式不支持类继承,必须指定到具体类。比如要序列化Point对象,就必须配置Point类的序列化器。
3) 注解配置序列化器
通过JSON序列化注解配置指定类序列化器:
其中:GeometrySerializer为自定义类,这里就不贴出具体实现了。
9. 禁用对象自引用检测
如果实体类中存在对象自引用(即多个属性字段指向同一个对象引用),在利用JSON.toJSONString方法序列化会出现如下内容:
其中,属性字段addition指向了属性字段userInfo的属性字段additions的第1个对象。
但是,这样的JSON字符串,可能无法与我们提供的标准JSON字符串对比。这里,Fastjson提供了序列化参数SerializerFeature.DisableCircularReferenceDetect(禁用循环引用检测)来禁用这个功能。
注意:实体对象中千万不要存在对象循环引用的情况。
《Java单元测试实战》——编写技巧:Java单元测试技巧之JSON序列化(9) https://developer.aliyun.com/article/1232279?groupCode=java