Java Dozer:没有默认构造函数的类映射
假设我想映射以下两个类:Java Dozer:没有默认构造函数的类映射,java,dozer,Java,Dozer,假设我想映射以下两个类: public class A { String member; public void setMember(String member) { this.member = member } public String getMember() { return member } } public class B { String member; public B(String member) { this.member =
public class A {
String member;
public void setMember(String member) { this.member = member }
public String getMember() { return member }
}
public class B {
String member;
public B(String member) { this.member = member }
public String getMember() { return member }
}
现在,当我希望Dozer执行以下转换时:dozerBeanMapper.map(a,B.class)代码>我得到一个错误,因为类B
缺少默认构造函数
解决这个问题的最好办法是什么?
使用推土机上的自定义转换器?:
我的一些数据对象没有公共构造函数。推土机是否支持此用例?
对。在创建目标对象的新实例时,如果未找到公共无参数构造函数,Dozer将自动检测私有构造函数并使用该构造函数。如果数据对象没有私有构造函数,您可以指定自定义BeanFactory来创建目标对象的新实例
以下是的文档,如果B类不是您的API,并且您对它没有控制权,并且您打算映射成员属性,那么您可以使用自定义bean工厂,该工厂可能会将默认值传递给构造函数:
<mapping>
<class-a>com.example.A</class-a>
<class-b bean-factory="com.example.factories.BFactory">
com.example.B
</class-b>
</mapping>
您可以为B创建默认构造函数,也可以使用a,以便Dozer可以创建它所需的实例。我在尝试映射ajava.util.Locale
时遇到了这个问题。为了解决我的问题,我做了如下工作:
我创建了一个名为LocaleMapper的类,该类将匹配dumb LocaleToLocaleConversion
public class LocaleMapper extends DozerConverter<Locale, Locale> {
public LocaleMapper() {
super(Locale.class, Locale.class);
}
@Override
public Locale convertTo(Locale localeA, Locale localeB) {
return localeA;
}
@Override
public Locale convertFrom(Locale localeA, Locale localeB) {
return localeA;
}
}
公共类LocaleMapper扩展DozerConverter{
公共LocaleMapper(){
super(Locale.class,Locale.class);
}
@凌驾
公共区域设置转换为(区域设置localeA,区域设置localeB){
返回localeA;
}
@凌驾
公共语言环境转换源(语言环境localeA,语言环境localeB){
返回localeA;
}
}
然后我修改了项目的映射xml:
<converter type="LocaleMapper">
<class-a>java.util.Locale</class-a>
<class-b>java.util.Locale</class-b>
</converter>
java.util.Locale
java.util.Locale
现在,我可以将区域设置对象添加到使用Dozer映射的类中。我的推土机知识有点有限,所以我无法解释它如何在引擎盖下工作的深入细节,但它对我的项目起到了作用
<converter type="LocaleMapper">
<class-a>java.util.Locale</class-a>
<class-b>java.util.Locale</class-b>
</converter>