我们正在使用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)。
任何人都知道错误发生的原因以及如何使用快速方式而不是逐个复制属性?
答案 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();
}