我正在使用Dozer映射一些bean,我有一个我无法弄清楚的映射。
以下是我的课程:
class A{
private ComplexeType type;
//Constructors & getters
}
class B{
private String[] type;
//Constructors & getters
}
class ComplexteType{
private List<String> list;
//Getter for the list, no constructor
}
如何将A类映射到B类?
我想使用xml将类A的字段类型映射到类B的字段类型。
这是xml文件:
<mapping>
<class-a>A</class-a>
<class-b>B</class-b>
<field custom-converter="AToBCustomConverter">
<a>type</a>
<b>type</b>
</field>
</mapping>
这是我的CustomConverter
的一个回音if (source == null) {
return null;
}
B dest = null;
if (source instanceof java.lang.String) {
// check to see if the object already exists
if (destination == null) {
dest = new A();
} else {
dest = (A) destination;
}
dest.getTypes().add((String) source);
return dest;
} else if (source instanceof B) {
String[] sourceObj = ((B) destination)
.getType()
.toArray(
new String[((B) destination)
.getType().size()]);
return sourceObj;
} else {
throw new MappingException(
"Converter StatResultCustomConverter used incorrectly. Arguments passed in were:"
+ destination + " and " + source);
}
}
答案 0 :(得分:1)
在这种情况下,我认为您的CustomConverter
不是必需的,请参阅here。
在映射文件中尝试此操作:
<mapping>
<class-a>A</class-a>
<class-b>B</class-b>
<field>
<a>type.list</a>
<b>type</b>
</field>
</mapping>
和Dozer 应该自动执行嵌套映射。
答案 1 :(得分:1)
这是我用来解决问题的映射。
<mapping>
<class-a>Q</class-a>
<class-b>B</class-b>
<field>
<a is-accessible="true">type<list</a>
<b is-accessible="true">type</b>
</field>
</mapping>