Java比较两个对象中属性值是否相同【使用反射实现】
在工作中,有些场景下,我们需要对比两个完全一样对象的属性值是否相等。比如接口替换的时候,需要比较新老接口在相同情况下返回的数据是否
在工作中,有些场景下,我们需要对比两个完全一样对象的属性值是否相等。比如接口替换的时候,需要比较新老接口在相同情况下返回的数据是否相同。这个时候,我们怎么处理呢?这里凯哥就使用Java的反射类实现。
/**
* 字段比较
* @param vo1 主项
* @param vo2 比较项
*/
private void compareFiledValue(DownTempMsg vo1, DownTempMsg vo2) {
//需要比较的字段
String [] filedArr = new String [] {"title","subTitle","dataMsg","remark","tempType","pline","bookIds","bookNames","downRemark","articleEndRemark","imgRemark",
"videoUrl","imgUrl","extend","showDownType","downTypeStyle","headerDownText","footerDownText",
"headerDownStyle","contentDownType","authorArr","pseudonym","introductionParagraphExtend","downGuideExtend","tempPercentage"};
String strClazzName = "class java.lang.String";
if(null != vo2){
for(String filed:filedArr){
if("imgCdnUrl".equals(filed)){
log.info("123");
}
Object obj1 = PropertyReflectUtil.getProperty(vo1,filed);
Object obj2 = PropertyReflectUtil.getProperty(vo2,filed);
if(null != obj1 && null != obj2){
String fieldType = PropertyReflectUtil.getPropertyType(vo1,filed);
log.info("filed:{},fieldType:{}",filed,fieldType);
//比较不同
String obj1Md5 = "";
String obj2Md5 = "";
try {
obj1Md5 = MD5.md5(obj1.toString());
obj2Md5 = MD5.md5(obj2.toString());
} catch (Exception e) {
log.info("md5异常了。异常信息为:{}",e.getMessage(),e);
}
//不相同vo2就设置成自己的。相同vo2就设置为空
if(!obj1Md5.equals(obj2Md5)){
log.info("不同,vo2的值就设置成自己的");
PropertyReflectUtil.setProperty(vo2,filed,obj2);
}else{
log.info("相同,vo2的值就设置成空");
PropertyReflectUtil.setProperty(vo2,filed,null);
}
}else{
log.info("其中一个为空.不处理");
}
}
}
}PropertyReflectUtil工具类:
import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import java.beans.Introsp
原创不易,完成人机校验,阅读全文
相关推荐
工作小总结Java反射,通过对象获取属性及属性值工作小总结&小工具类判断两个数组是否存在交集工作小总结如何通过反射获取属性的名字和属性类型工作小总结&小工具类JAVA 根据指定目录:C:\Users\n\Desktop\地铁发票获取所有文件名称。然后使用正则表达式提取出文件名字中数字部分。注意,数字带有小数点。 然后封装成集合对象。对象中两个属性:文件名称,金额。怎么写FREMARKER学习系列ftl(在 FreeMarker 模板中)判断对象是否存在及判断对象内容是否为空反射Java中反射学习系列教程-小案例-模拟spring创建bean对象并发java cas算法实现乐观锁 (Compare and Swap 比较并交换)工作小总结【思路】使用Java手写入参是 Json对象,根据json对象中type值不同,选择不同规则链的自定义规则节点的支持过滤、支持分支的规则引擎案例