工作小总结

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

原创不易,完成人机校验,阅读全文

相关推荐