为什么从JPA实体到JAX-B Bean使用BeanUtils.copyProperties似乎是不可能的?

时间:2013-07-11 08:03:36

标签: 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: argument type mismatch

注意这是BeanUtils的Spring实现:

import org.springframework.beans.BeanUtils

并且属性的命名是相同的(使用它们的getter / setter)。

任何人都知道错误发生的原因以及如何使用快速方式而不是逐个复制属性?

1 个答案:

答案 0 :(得分:2)

这个例子运作良好。此处String属性已复制到enum属性
实体

public class A 
{
   private String valueFrom;

   public String getValue()
   {
      return valueFrom;
   }

   public void setValue(String value)
   {
      this.valueFrom = value;
   }
}  

DTO En是枚举)

public class B 
{
   private En valueTo;

   public void setValue(String def)
   {
      this.valueTo = En.valueOf(def);
   }

   public void setEnumValue(En enumVal)
   {
      this.valueTo = enumVal;
   }
}  

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

public String getValue() //  

e.g。

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