Spring 为什么从JPA实体到JAX-Bbean似乎不可能使用BeanUtils.copyProperties?
我们使用JPA实体获取数据库行,然后当我们将其传输到外部时,我们希望使用断开连接的对象(DTO),它是用JAX-B注释的简单bean 我们使用映射器,其代码如下所示: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
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实体中,这样即使是空值也会被复制。