有兩個物體變數,存放的是修改前和修改后的資訊。
比如
LibraryDTO old=new LibraryDTO ();
LibraryDTO new=new LibraryDTO ();
我現在需要查看這兩個物體類的全部屬性的值來進行對比,并將有差別的列出來。分為兩個欄位存入到一個表中,分為修改前內容和修改后內容
請問如何實作?
uj5u.com熱心網友回復:
手寫的話回圈 判斷 就是有點硬編碼的感覺或者通過反射 獲取每個物件的所有欄位 再比較
uj5u.com熱心網友回復:
public static Map<String, String> compareTom(Tom before, Tom after) throws Exception {List<Field> fieldList = new ArrayList<>();
fieldList.addAll(Arrays.asList(before.getClass().getDeclaredFields()));
Object old;
Object now;
for (Field field : fieldList) {
field.setAccessible(true);
old = field.get(before);
now = field.get(after);
if (JSON.toJSONString(old).equals(JSON.toJSONString(now))) {
field.set(before,null);
field.set(after,null);
}
}
Map<String, String> compareResult = new HashMap<>();
compareResult.put("beforeModify", JSON.toJSONString(before));
compareResult.put("afterModify", JSON.toJSONString(after));
return compareResult;
}
uj5u.com熱心網友回復:
-----------------------------------------------------------
你把我隨便定義的物件Tom改成你要用的LibraryDTO就可以了,任何物件都行,但是僅限于它自身的屬性,不包括它從父類繼承來的屬性,如果有從父類繼承過來的屬性,用下面的方法
public static Map<String, String> compareTom(Tom before, Tom after) throws Exception {
List<Field> fieldList = new ArrayList<>();
fieldList.addAll(Arrays.asList(before.getClass().getDeclaredFields()));
Class superClazz = before.getClass().getSuperclass();
while (superClazz != null) {
fieldList.addAll(Arrays.asList(superClazz.getDeclaredFields()));
superClazz = superClazz.getSuperclass();
}
Object old;
Object now;
for (Field field : fieldList) {
field.setAccessible(true);
old = field.get(before);
now = field.get(after);
if (JSON.toJSONString(old).equals(JSON.toJSONString(now))) {
field.set(before,null);
field.set(after,null);
}
}
Map<String, String> compareResult = new HashMap<>();
compareResult.put("beforeModify", JSON.toJSONString(before));
compareResult.put("afterModify", JSON.toJSONString(after));
return compareResult;
}
uj5u.com熱心網友回復:
這個需求前端記住就行了轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/283490.html
標籤:Java EE
上一篇:java求代碼