通过反射找出两个实体类中不同的值

 

功能:主要有一个修改日志的需求,在修改时需要修改前后的值做一个日志

解释:传入两个实体对象,通过getClass().getDeclaredFields()获取对象的字段,然后比较不相同的值存到map里面,移除不需要的字段值后存到string里面返回

 

 

/** 获取修改的内容*/
public
static <T> String getContent(T bean, T po){ Map<String,String> oldMap = new HashMap<String, String>(); Map<String,String> newMap = new HashMap<String, String>(); Field[] fs = bean.getClass().getDeclaredFields(); for (Field f : fs) { f.setAccessible(true); Object v1 = null; Object v2 = null; try { v1 = f.get(bean); v2 = f.get(po); } catch (IllegalAccessException e) { e.printStackTrace(); } if(!equals(v1,v2)){ oldMap.put(f.getName(),v1.toString()); newMap.put(f.getName(),v2.toString()); } } //移除不需要的字段 newMap.remove("createTime"); newMap.remove("updateTime"); oldMap.remove("createTime"); oldMap.remove("updateTime"); List<Map<String,String>> list = new ArrayList<>(); list.add(oldMap); list.add(newMap); StringBuffer content = new StringBuffer(); if(list.get(0).size()>0){ content.append("修改后:"+list.get(0).toString()+" , "); content.append("原值:"+list.get(1).toString()); } return content.toString(); }


private static boolean equals(Object obj1, Object obj2) {
if(obj1 == obj2){
return true ;
}
if(obj1 == null || obj2 == null){
return false ;
}
return obj1.equals(obj2);
}
 

 

posted @ 2021-12-29 15:36  不是安逸  阅读(245)  评论(0编辑  收藏  举报