《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

 

相关文章
|
8月前
|
安全 Java 开发者
告别NullPointerException:Java Optional实战指南
告别NullPointerException:Java Optional实战指南
363 119
|
9月前
|
存储 前端开发 Java
【JAVA】Java 项目实战之 Java Web 在线商城项目开发实战指南
本文介绍基于Java Web的在线商城技术方案与实现,涵盖三层架构设计、MySQL数据库建模及核心功能开发。通过Spring MVC + MyBatis + Thymeleaf实现商品展示、购物车等模块,提供完整代码示例,助力掌握Java Web项目实战技能。(238字)
1124 0
|
9月前
|
Java 开发者
Java并发编程:CountDownLatch实战解析
Java并发编程:CountDownLatch实战解析
601 100
|
10月前
|
数据采集 JSON Java
Java爬虫获取1688店铺所有商品接口数据实战指南
本文介绍如何使用Java爬虫技术高效获取1688店铺商品信息,涵盖环境搭建、API调用、签名生成及数据抓取全流程,并附完整代码示例,助力市场分析与选品决策。
|
9月前
|
人工智能 Java API
Java AI智能体实战:使用LangChain4j构建能使用工具的AI助手
随着AI技术的发展,AI智能体(Agent)能够通过使用工具来执行复杂任务,从而大幅扩展其能力边界。本文介绍如何在Java中使用LangChain4j框架构建一个能够使用外部工具的AI智能体。我们将通过一个具体示例——一个能获取天气信息和执行数学计算的AI助手,详细讲解如何定义工具、创建智能体并处理执行流程。本文包含完整的代码示例和架构说明,帮助Java开发者快速上手AI智能体的开发。
3372 8
|
9月前
|
人工智能 Java API
Java与大模型集成实战:构建智能Java应用的新范式
随着大型语言模型(LLM)的API化,将其强大的自然语言处理能力集成到现有Java应用中已成为提升应用智能水平的关键路径。本文旨在为Java开发者提供一份实用的集成指南。我们将深入探讨如何使用Spring Boot 3框架,通过HTTP客户端与OpenAI GPT(或兼容API)进行高效、安全的交互。内容涵盖项目依赖配置、异步非阻塞的API调用、请求与响应的结构化处理、异常管理以及一些面向生产环境的最佳实践,并附带完整的代码示例,助您快速将AI能力融入Java生态。
1441 12
|
8月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
407 1
|
8月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
382 1
|
8月前
|
存储 人工智能 算法
从零掌握贪心算法Java版:LeetCode 10题实战解析(上)
在算法世界里,有一种思想如同生活中的"见好就收"——每次做出当前看来最优的选择,寄希望于通过局部最优达成全局最优。这种思想就是贪心算法,它以其简洁高效的特点,成为解决最优问题的利器。今天我们就来系统学习贪心算法的核心思想,并通过10道LeetCode经典题目实战演练,带你掌握这种"步步为营"的解题思维。
|
10月前
|
算法 Java 开发者
Java流程控制:条件与循环结构实战
本文深入讲解编程中的流程控制结构,涵盖条件语句(if-else、switch)、循环结构(for、while、do-while)及循环控制关键字(break、continue)的使用技巧与实战案例,帮助开发者写出更清晰、高效的代码。

热门文章

最新文章