当前位置: 首页 > 知识库问答 >
问题:

如何使用Spring [SpEL] 在 Java 中将属性从一个 Java 对象合并到另一个 Java 对象?

赵华彩
2023-03-14

我正在使用Spring,但对它的所有功能并不熟悉。寻找将字段从一个Java对象实例复制到另一个对象实例的好方法。我已经看到了如何将属性从一个Java bean复制到另一个Java bean?但我要找的是更具体的,所以下面是详细信息:

假设我有两个类P的实例,源

P source;
P target;
List<string> properties; 

//source, target are populated. properties is {"a", "b"}  
//Now I need some Spring (SpEL?) trick to do the equivalent of:
target.setA(source.getA());
target.setB(source.getB());

共有2个答案

轩辕鸿祯
2023-03-14

我不认为SpEL需要这里,它可以用BeanUtils解决。copyProperties(对象、对象、字符串…)。根据您的示例,如果您的类具有属性“a”、“b”、“c”,并且您只想复制前两个,可以这样调用它

BeanUtils.copyProperties(source, target, "c");

希望它有帮助!

应俭
2023-03-14
Field[] fields = source.getClass().getDeclaredFields();

for (Field f: fields) {
    if (properties.contains(f.getName())) {

        f.setAccessible(true);

        f.set(destination, f.get(source));
    }
}

以下是一些关于反思的教程:

http://www.oracle.com/technetwork/articles/java/javareflection-1536171.html

http://tutorials.jenkov.com/java-reflection/index.html

但是要小心,Reflection有特定的用例。

BeanWrapper srcWrap = PropertyAccessorFactory.forBeanPropertyAccess(source);
BeanWrapper destWrap = PropertyAccessorFactory.forBeanPropertyAccess(destination);

properties.forEach(p -> destWrap.setPropertyValue(p, srcWrap.getPropertyValue(p)));

Spring BeanWrapper的例子归功于:https://stackoverflow.com/a/5079864/6510058

 类似资料:
  • 假设我们有一个这样定义的对象A: 出于某种原因,我需要创建第二个对象B,它只具有对象A的前两个属性: 所以我的问题是:将对象A复制到对象B的最佳方法是什么?我一直在逐个复制获取者和设置者的属性,但有些事情告诉我一定有更好的方法来做到这一点!特别是当对象将具有很多属性时,我必须编写一行又一行的代码,只是为了将它们全部复制到第二个对象B... 多谢了:) 编辑:我一直被一个“另一个问题的可能重复”提醒

  • 问题内容: 我有一个简单的Java POJO,可以将属性复制到同一POJO类的另一个实例。 我知道我可以使用BeanUtils.copyProperties()做到这一点,但我想避免使用第三方库。 那么,如何简单,正确,安全地做到这一点呢? 顺便说一句,我正在使用Java 6。 问题答案: 我想如果您查看BeanUtils的源代码,它将向您展示如何在不实际使用BeanUtils的情况下执行此操作。

  • 问题内容: 在Python中,是否有一个库方法可在同一类的两个(已经存在)实例之间复制所有属性? 我的意思是,类似Apache Commons的东西 问题答案: 如果您的班级未修改或出于特殊属性访问目的,则所有属性都存储在其中,因此您可以执行以下操作: 如果使用python属性,则应查看并筛选出要复制的属性。

  • 问题内容: 见下课 假设我创建了一个父对象,如下所示 根据上面的代码注意,birthDate属性为null。现在我只想将非null属性从父对象复制到另一个对象。就像是 我需要它,因为我想更新anotherParent对象而不用null值覆盖其非null值。 你知道这样的帮手吗? 我是否接受最少的代码作为答案,是否不介意使用助手 问候, 问题答案: 我想您已经有了解决方案,因为自您提出要求以来已经发

  • 好的,在做任何事情之前,我想提一下,这是为学校准备的,所以请不要编写任何代码来修复我的代码,因为这不会教我任何东西。相反,如果我使用了不正确的术语,我需要的是参考、解释和适当的术语。 所以我这里有一些问题。这是我需要做的, *在学生类中包括以下方法:a.第B1部分中每个实例变量的访问器(即getter)b.第B1部分中每个实例变量的mutator(即setter) 注意:对Student类的实例变

  • 我必须用不同的键和值将rest模板响应映射到我的DTO。目前我正在从rest api获得这个json响应 我想将其映射到我的 DTO 中,以便能够保存到数据库中 我想要的是只获得相同的动态密钥,以匹配上述api的响应。目前我正在这样做,但似乎我没有设置相同键的正确值。 执行此操作后,我的数据库中出现空值。