美文网首页
基于java反射机制的实体对比

基于java反射机制的实体对比

作者: 末世狂人 | 来源:发表于2019-03-08 16:37 被阅读0次

在我们日常开发过程中,从前端返回的对象中数据可能不是你所预期的那样!然而在Spring data jpa中,底层基础框架并没有针对实体属性的非空验证。如果你传递回来的实体中有属性为null,那么框架回忠心的将你已有的数据替换为null,而不是维持原样。

​ 如何解决这样的问题,java的反射机制与广大的网友给我们提供了解决办法。

代码如下

public static boolean updateNotNullField(Object rawObject, Object newObject) throws InvocationTargetException, IllegalAccessException, NoSuchMethodException {
    //如果连个对象不一致。不进行更新字段值的操作
    if (rawObject.getClass().getName() != newObject.getClass().getName()) {
        return false;
    }
    //获取原始对象中的所有public方法
    Method[] methods = rawObject.getClass().getDeclaredMethods();
    //用于提取不包含指定关键词的方法
    String regExpression = "^(get)(?!Id|CreateTime)(\\w+)";
    Pattern pattern = Pattern.compile(regExpression);
    Matcher m;
    for (Method method : methods) {
        m = pattern.matcher(method.getName());
        //正则匹配以get开头,后面不能匹配Id、CreateTime这两个单词的方法
        if (m.find()) {
            Object o = method.invoke(newObject, null);
            //忽略值为空的字段
            if (o == null) {
                continue;
            }
            //取出get方法名后面的字段名
            String fieldName = m.group(2);
            //找到该字段名的set方法
            Method rawMethod = rawObject.getClass().getMethod("set" + fieldName, method.getReturnType());
            //调用实体对象的set方法更新字段值
            rawMethod.invoke(rawObject, o);
        }
    }
    return true;
}

这个方法为我们提供了除开指定关键字的两个实体之间属性的重叠。也就是说,代码以rawObject为基础,将newObject中的非null值赋值给相同属性名的属性上。

但是这样的方法也只能用单层的实体,如果你的实体中还包含了其他的实体,那么这样的赋值方法是不能判断出你下层实体中的属性的。所以 如果你的实体中还包含了其他的实体,那么你最好做一个model来将你的实体解成单层,或者一层一层的去对比,如果你确实要用到上述的方法的话!

相关文章

  • 基于java反射机制的实体对比

    在我们日常开发过程中,从前端返回的对象中数据可能不是你所预期的那样!然而在Spring data jpa中,底层基...

  • 第6讲 | 动态代理是基于什么原理?

    谈谈 Java 反射机制,动态代理是基于什么原理? 典型回答 反射机制是 Java 语言提供的一种基础功能,赋予程...

  • Java反射机制入门

    Java反射机制入门 一、什么是反射 JAVA反射机制(The JAVA reflection mechanism...

  • 反射之一

    总结内容源自一下文章粗浅看java反射机制反射机制应用实践谈谈java反射机制Java Reflection(反射...

  • 反射之二

    总结内容源自一下文章粗浅看java反射机制反射机制应用实践谈谈java反射机制Java Reflection(反射...

  • java反射机制

    java的反射机制 1 JAVA的反射机制是什么?反射机制能做什么?反射机制的优点与缺点2 认识 Class...

  • Java基础之反射

    Java基础之—反射(非常重要)Java中反射机制详解Java进阶之reflection(反射机制)——反射概念与...

  • 反射之三

    总结内容源自以下文章 粗浅看java反射机制 反射机制应用实践 谈谈java反射机制 Java Reflectio...

  • Java中反射的用途

    Java的反射机制是Java特性之一,反射机制是构建框架技术的基础所在。灵活掌握Java反射机制,对大家以后学习框...

  • 详解Java反射机制(Reflection)

    详解Java反射机制(Reflection) 反射机制的作用 JAVA反射机制是在运行状态中,对于任意一个类,都能...

网友评论

      本文标题:基于java反射机制的实体对比

      本文链接:https://www.haomeiwen.com/subject/stzrpqtx.html