java实现记录两个对象修改过那些属性并记录属性值

方法逻辑

    public static String addRecord(Object oldObj, Object newObj) {
        StringBuilder info = new StringBuilder();
        try {
            // 得到类对象
            Class<? extends Object> class1 = oldObj.getClass();
            Class<? extends Object> class2 = newObj.getClass();
            if (!class1.equals(class2)) {
                throw new RuntimeException("请传入两个相同的实体类对象");
            }
            // 得到属性集合
            Field[] fields1 = class1.getDeclaredFields();
            Field[] fields2 = class2.getDeclaredFields();
            Long id = null;
            for (Field field1 : fields1) {
                // 设置属性是可以访问的(私有的也可以)
                field1.setAccessible(true);
                if (id == null && field1.getName().equals("id")) {
                    id = (Long) field1.get(oldObj);
                }
                for (Field field2 : fields2) {
                    // 设置属性是可以访问的(私有的也可以)
                    field2.setAccessible(true);
                    // 比较属性名是否一样
                    if (field1.equals(field2)) {
                        if ((field2.get(newObj) == null || StringUtils.isEmpty(field2.get(newObj) + ""))
                                && (field1.get(oldObj) == null || StringUtils.isEmpty(field1.get(oldObj) + ""))) {
                            break;
                        }
                        // 比较值是否一样
                        if (!field1.get(oldObj).equals(field2.get(newObj))) {
                            // 得到注解
                            EditCompare pn = field1.getAnnotation(EditCompare.class);
                            if (pn != null) {
                                info.append("【").append(pn.value()).append("】:\"").append(field1.get(oldObj)).append("\" 修改为 \"").append(field2.get(newObj)).append("\",");
                            }
                        }
                        break;
                    }
                }
            }
        } catch (RuntimeException e) {
            e.printStackTrace();
            log.error(e.getMessage());
        } catch (Exception e) {
            e.printStackTrace();
            log.error("属性内容更改前后验证错误,日志无法被记录!");
        }
        return StringUtils.isBlank(info) ? "" : info.substring(0, info.length() - 1);
    }

对象上添加此注解

@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface EditCompare {

    /**
     * 汉字全称
     */
    String value();

}

实现后的效果为:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值