java比较对象修改后字段变化情况
@Slf4j
public class ObjectUtil {
public static String compareObj(Object beforeObj, Object afterObj) {
if (beforeObj == null || afterObj == null) {
return null;
}
if (!beforeObj.getClass().isAssignableFrom(afterObj.getClass())) {
log.info("两个对象不相同,无法比较");
return null;
}
StringJoiner stringJoiner = new StringJoiner(";");
Field[] beforeFields = beforeObj.getClass().getDeclaredFields();
Field[] afterFields = afterObj.getClass().getDeclaredFields();
Field.setAccessible(beforeFields, true);
Field.setAccessible(afterFields, true);
if (beforeFields != null && beforeFields.length > 0) {
for (int i = 0; i < beforeFields.length; i++) {
Object beforeValue = null;
Object afterValue = null;
try {
beforeValue = beforeFields[i].get(beforeObj);
afterValue = afterFields[i].get(afterObj);
} catch (IllegalAccessException e) {
log.info("获取属性的属性值错误");
e.printStackTrace();
}
if ((beforeValue.equals("") && afterValue.equals("")) || beforeValue.equals(afterValue)) {
continue;
}
if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null)) {
String value = beforeFields[i].getAnnotation(ApiModelProperty.class).value();
stringJoiner.add("将" + value + beforeValue + "修改为" + afterValue);
}
}
}
return stringJoiner.toString();
}
}