Spring 为什么从JPA实体到JAX-Bbean似乎不可能使用BeanUtils.copyProperties?

Spring 为什么从JPA实体到JAX-Bbean似乎不可能使用BeanUtils.copyProperties?,spring,jaxb,entity,dto,apache-commons-beanutils,Spring,Jaxb,Entity,Dto,Apache Commons Beanutils,我们使用JPA实体获取数据库行,然后当我们将其传输到外部时,我们希望使用断开连接的对象(DTO),它是用JAX-B注释的简单bean 我们使用映射器,其代码如下所示: public BillDTO map(BillEntity source, BillDTO target) { BeanUtils.copyProperties(source, target); return target; } java.lang.IllegalArgumentException: argume

我们使用JPA实体获取数据库行,然后当我们将其传输到外部时,我们希望使用断开连接的对象(DTO),它是用JAX-B注释的简单bean

我们使用映射器,其代码如下所示:

public BillDTO map(BillEntity source, BillDTO target) {
    BeanUtils.copyProperties(source, target);
    return target;
}
java.lang.IllegalArgumentException: argument type mismatch
但是当代码运行时,我们会遇到如下错误:

public BillDTO map(BillEntity source, BillDTO target) {
    BeanUtils.copyProperties(source, target);
    return target;
}
java.lang.IllegalArgumentException: argument type mismatch
注意,这是BeanUtils的Spring实现:

import org.springframework.beans.BeanUtils
并且属性的命名是相同的(与它们的getter/setter相同)

  • 有人知道为什么会出错吗

  • 如何使用一种快速的方法,而不是一个接一个地复制属性


这个例子效果很好。此处
String
属性被复制到
enum
属性:

实体:

public class A {
   private String valueFrom;

   public String getValue() {
      return valueFrom;
   }

   public void setValue(String value) {
      this.valueFrom = value;
   }
}
DTO
En
是枚举):

至于您的GitHub示例,getter中B类的问题应该是:

public String getValue()
例如:

public String getValue() {
   return value.toString();
}

发布完整堆栈跟踪并添加
BillDTO
BillEntity
嗨,您指向正确的方法,事实上我找到了它不起作用的原因:DTO中的一个属性是枚举,而实体中的一个属性是字符串。甚至我在DTO中添加了一个新的setter,它接受一个字符串,但它不起作用。您使用的是哪种BeanUtils?SpringOne还是ApacheOne?我在这里有一个类似的测试:结果:变量c被正确设置(“c”),但b.getValue()保持为空。但是我没有任何异常。好的,谢谢,我发现在这种情况下,如果源代码中有空值,它会生成异常。最后,我将枚举放在JPA实体中,这样即使是空值也会被复制。