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

知道什么是源和什么是目标的两个字符串之间的推土机映射

王扬
2023-03-14

我有两个对象,它们对字符串有两个单独的表示,我正在使用Dozer执行对象到对象的映射。当一个对象上的字符串使用自定义转换器映射到另一个对象上的字符串时,我在运行双向数据转换时遇到问题。

比如说你有:

public class ClassA { private string1; }

public class ClassB { private string1; }

数据转换设置如下:

   ClassA String          ClassB String
   ---------------        ---------------
   STRING_A_1        <->  STRING_A_2
   STRING_B_1        <->  STRING_B_2
   STRING_C_xxx      <->  STRING_C_xxx

我的映射器设置如下:

public class CustomConverter extends DozerConverter<String, String> implements MapperAware {

  public CustomConverter() {
    super(String.class, String.class);
  }

  @Override
  public String convertTo(String source, String target) {
    return MyEnum.toA(source);
  }

  @Override
  public String convertFrom(String source, String target) {
    return MyEnum.toB(source);
  }
}

唯一被调用的方法是convertFrom(String,String)。我尝试实现MapperAware接口,但没有看到加载源类和目标类类型的任何方法。我希望在这两种方法中都能检测到调用了什么来确定要使用的适当映射方向。

如何使用转换器检测映射的实际方向?

共有1个答案

徐文斌
2023-03-14

在推土机转换器中,仅根据其参数类型调用convertFrom和convertTo。不考虑映射配置中a类和b类的顺序。

因此,正如您所指出的,只调用convertFrom。

这里的问题是Dozer正在进行类实例转换,而您确实需要字符串转换。

因此,您需要识别源字符串的格式并手动进行转换。

或者,如果您可以使用JSON,那么JSON解析库将为您执行此操作。例如。在Jackson中:

jsonMapper = new ObjectMapper();
A a = jsonMapper.readValue(new StringReader(source), A.class);
B b = dozerMapper.map(a, B.class);
StringWriter sw = new StringWriter();
jsonMapper.writeValue(sw, b);
target = sw.toString();
 类似资料:
  • 问题内容: true如果传入的数字包含,则此方法返回1。 该+ “”零件的目的是 什么?如何使一个?(据我所知.contains只能使用Strings)。 问题答案: Anint是原始元素。在字符串中添加基元将执行该基元到a的隐式转换,String并将两个字符串加在一起。在这种情况下,将int转换并添加”“(empty String), 可以重写为: 要么 要么

  • 其实说到字符串,这个概念没有具体的说法,但是我们根据平时的归纳总结,也能一段,便于大家理解,字符串就是把字符连在一直,串成一串又一串;字符串内可以包含数字、字母、特殊符号等所有内容;在Python中只要对一些内容加上对双引号或一对单引号,就默认为是字符串;(三对单引号或三对双引号可以写多行字符串)。 字符串的关键是str,是string的缩写。 一、什么是字符串? 解释:对于"Holl world

  • 既然c 17有了< code>std::byte,我就在寻找一种方法,将读取文件到< code>char的代码转换成读取文件到< code>byte的代码。文件包含字节,而不是一堆整数。 然后我读了这个问题和另一个问题,人们认为把文件读入<code>字节</code>是错误的,把文件读进<code<char>是正确的。 如果< code>byte不是为了访问内存而设计的,那么它的目的是什么呢?正如

  • 此外,我的电脑是Java7,而我的有点坏的mac是Java6,不会更新。我不确定,但我怀疑这可能是个问题。 发生了什么,我该怎么修复它? 更新 我把我认为正确的JRE放在构建路径中,但现在当我运行它时,我得到了这些错误:

  • 本文向大家介绍你知道p标签和br标签两者的区别是什么吗?相关面试题,主要包含被问及你知道p标签和br标签两者的区别是什么吗?时的应答技巧和注意事项,需要的朋友参考一下 block 块级元素,br 内联元素; block 能被 css 修改,br 不能; block 非单标签元素,br 是; block 换行靠的是块级元素特性,br 换行靠的可能是类似 \n 的渲染规则

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