1

我们使用 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)。

  • 有人知道为什么会发生错误吗?

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

4

1 回答 1

2

这个例子运行良好。这里String属性被复制到enum属性:

实体:

public class A {
   private String valueFrom;

   public String getValue() {
      return valueFrom;
   }

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

DTOEn是枚举):

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 示例,class Bgetter 中的问题应该是:

public String getValue()

例子:

public String getValue() {
   return value.toString();
}
于 2013-07-11T13:13:13.290 回答