我有一个类,让我们用Map字段将其称为A,将其转换为B类,我将其用于数据库存储/检索,其中该字段映射到String。从A到B完美地进行映射。但是,当从B转到A时,我得到一个IllegalArgument异常,它说它不能将String转换为Map。让我感到困惑,因为Dozer's documentation说这确实可以说:
数据类型转换由Dozer映射引擎自动执行。目前,Dozer支持以下类型的转换:(这些都是双向的)
然后继续列出String to Map作为可能的事情之一。
我在这里缺少什么,或者我需要做些什么特别的事?我的文件看起来像:
public class ClassA {
Map<String, String> field;
public Map<String, String> getField() {
return field;
}
public void setField(
Map<String, String> field) {
this.field = field;
}
}
public class ClassB {
String field;
public String getField() {
return field;
}
public void setField(String field) {
this.field = field;
}
}
<mapping>
<class-a>com.fake.company.name.ClassA</class-a>
<class-b>com.fake.company.name.ClassB</class-b>
</mapping>
答案 0 :(得分:1)
从Map Based Properties section(classes used in documentation),似乎需要显式映射字段,因为字段名称将用作地图的键。
<mapping>
<class-a>com.fake.company.name.ClassA</class-a>
<class-b>com.fake.company.name.ClassB</class-b>
<field>
<a>field</a>
<b>field</b>
</field>
</mapping>
您可以为键使用不同的值
<a key="someKeyValue">field</a>
但是,如果你的地图有几个键值对,你可能需要一个自定义转换器(see here for details),因为否则Dozer不知道如何从字符串重建原始地图。