通过 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 不知道如何从字符串重建原始地图。