Gson: 比较两个json是否等价(比较java bean是否相等的通用方法)

问题场景:对老代码接口进行重构,需要验证新接口逻辑是否和旧接口一致,在重构过程中是否产生了bug

解决思路:用相同的请求参数同时调用新接口和旧接口,然后对比返回的java对象。基于线上业务实际运行代码,若返回数据一直等价,则认为新旧接口逻辑一致。在这里,将返回对象转换为json,然后通过Gson解析json,对比json是否等价来确定java对象是否等价。

解决方案:先将两个java对象转换为json,然后通过gson将json转换为JsonElement对象,分别实现两个JsonElement对象为4种具体对象时的比较方案,然后递归比较。其中,若两个对象为JsonObject(即json对象),分别比较每个key对应的value是否相等;若两个对象为JsonArray(即json数组),先将其转换为List,并且按照List对象转换为json字符串时的字典序排序,再分别比较两个List中的对应对象是否等价,从而避免了json数组无序的问题。

import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonNull;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.JsonPrimitive;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import jav
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值