通过 Dozer 将字符串映射到 Map
Mapping a String to a Map via Dozer
我有一个 class,我们称它为带有映射字段的 A,它被转换为 class B,我将其用于该字段映射到的数据库 storage/retrieval一个字符串。当从 A 完美地转到 B 时,映射有效。但是,当从 B 转到 A 时,我得到一个 IllegalArgument 异常,它表示它不能将 String 转换为 Map。让我感到困惑,因为 Dozer's documentation 说这在它说的地方确实有效:
Data type coversion is performed automatically by the Dozer mapping engine. Currently, Dozer supports the following types of conversions: (these are all bi-directional)
然后它继续将 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>
来自 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 不知道如何从字符串重建原始地图。
我有一个 class,我们称它为带有映射字段的 A,它被转换为 class B,我将其用于该字段映射到的数据库 storage/retrieval一个字符串。当从 A 完美地转到 B 时,映射有效。但是,当从 B 转到 A 时,我得到一个 IllegalArgument 异常,它表示它不能将 String 转换为 Map。让我感到困惑,因为 Dozer's documentation 说这在它说的地方确实有效:
Data type coversion is performed automatically by the Dozer mapping engine. Currently, Dozer supports the following types of conversions: (these are all bi-directional)
然后它继续将 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>
来自 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 不知道如何从字符串重建原始地图。