通过Dozer将字符串映射到地图

时间:2016-04-04 20:09:24

标签: java dozer

我有一个类,让我们用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>

1 个答案:

答案 0 :(得分:1)

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