当前位置: 首页 > 知识库问答 >
问题:

通过推土机将字符串映射到地图

赫连子石
2023-03-14

我有一个类,我们用一个映射字段将其称为a,它被转换为B类,用于数据库存储/检索,其中该字段映射到字符串。从A到B的映射非常有效。然而,当从B到A时,我得到了一个IllegalArgument异常,它表示无法将字符串转换为映射。让我困惑的是,Dozer的文档中说,这确实适用于以下情况:

数据类型转换由Dozer映射引擎自动执行。目前,Dozer支持以下类型的转换:(这些都是双向的)

然后它继续列出要映射的字符串,作为可能的事情之一。

我在这里遗漏了什么,或者我需要做什么特别的事?我的文件如下所示:

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个答案

张鹏云
2023-03-14

从基于映射的属性部分(留档中使用的类)看起来需要显式映射字段,因为字段名称将用作映射的键。

<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>

但是,如果地图有多个键值对,则可能需要一个自定义转换器(请参阅此处了解详细信息),因为否则,Dozer不知道如何从字符串重建原始地图。

 类似资料:
  • 我有一个非常复杂的对象。 我的目标是将问题答案集映射展平,以便将值中的所有列表合并为一个 我没有试图找出如何在Dozer中将所有这些列表合并到一个列表中,我甚至不确定它是否能够做到,而是编写了一个自定义setter。 我假设这意味着Dozer只需读取第一个对象的调查并将其放入makeFlatSurvey,但它读取调查对象上的questionAnswerGroup字段,然后遍历QuestionAns

  • 我试图使用Dozer映射UUID字段,遇到了Dozer github上提到的一个问题: https://github.com/DozerMapper/dozer/issues/83 问题是-显然,Dozer依赖于UUID中不存在的默认无参数构造函数。因此,该链接显示了如何告知推土机执行参考复制。然而,使用该提示并没有帮助,我仍然会遇到以下异常: org.dozer.java.lang.java.u

  • 我想让推土机地图成为我的职业: 到生成的,如下所示: . 也就是说,我正在尝试将嵌套类的字段映射到平面键目标。我使用的是JavaAPI的Dozer,而不是xml。我无法找到适当的构建器配置来管理它。基本代码类似于:

  • 我在Spring启动时使用推土机映射器。如果我将数据从实体映射到EntityDTO,那么dozer maper的工作就是将数据从实体类复制到EntityDTO,对于原语也是如此。但是假设我有这样一门课 和名称为EntityDTO的DTO 那么它不会将数据从entityChild映射到EntityChildTos,有人能帮我解决这个问题吗?

  • 我是使用dozer的新手。我需要将集合映射到一个类,该类是集合中源类的属性。我有如下类技术 我想映射到 哪里 我的推土机绘图将是什么样子?

  • 为什么推土机不能将数字类型的源类变量映射到相同类型的目标类变量? 正在获取以下异常: 在这里,源类和目标类都引用了相同的类类型,比如事务。两者都有Number字段,但在从源类映射到目标类时,它会引发这样的异常。 我不明白为什么同一数据类型会出现“参数不匹配”?