Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Orika:未对空值调用CustomConverter_Java_Orika - Fatal编程技术网

Java Orika:未对空值调用CustomConverter

Java Orika:未对空值调用CustomConverter,java,orika,Java,Orika,我正在使用Orika 1.4.6,我想使用CustomConverter映射我的一个字段。当source字段为null时,似乎不会调用转换器。这是我的密码: class From { String source; } class To { String destination = "defaultValue"; } public class Mapper extends ConfigurableMapper { private class MyConverter ext

我正在使用Orika 1.4.6,我想使用CustomConverter映射我的一个字段。当source字段为null时,似乎不会调用转换器。这是我的密码:

class From {
    String source;
}

class To {
    String destination = "defaultValue";
}

public class Mapper extends ConfigurableMapper {

  private class MyConverter extends CustomConverter<String, String> {

    @Override
    public String convert(String source, Type<? extends String> destinationType) {
      if (null == source) {
        return "NULL!";
      }
      return "->" + source + "<-";
    }
  }

  @Override
  protected void configure(MapperFactory factory) {

    factory.getConverterFactory().registerConverter("converter", new MyConverter());

    factory.classMap(From.class, To.class)

        .fieldMap("source", "destination")
        .mapNulls(true)
        .converter("converter")
        .add()

    .register();
  }
}
我期望得到以下结果:

NULL!
然而,我得到以下信息:

null
这表明转换器根本不被调用,空值只是被复制,因为

.mapNulls(true)
如果我现在设置

.mapNulls(false)
问题仍然存在,因为源字段中的null值被忽略,而目标字段保持不变(在本例中为值“defaultValue”)

例如,可以将“customize”方法与CustomMapper结合使用。然而,在我的实际应用中,这个解决方案要复杂得多,因此使用CustomConverter的解决方案似乎更合适

有人知道这个具体例子中的问题在哪里吗

干杯,
罗伯特

观察到的行为是故意的

与使用处理空值的自定义转换器不同,可以创建处理对象创建的ObjectFactory。在这里,我们可以在自定义转换器中设置默认值并在需要时覆盖它们(即,如果映射了非空对象)。 注意,这里我们必须设置

.mapNulls(false)
为了让它发挥作用


感谢Orika的Elaatifi提供此解决方案

我使用CustomMapper是您可以接受的解决方案?使用CustomMapper的解决方案有效且正确。不过,我觉得从长远来看,上述解决方案将更简单,更易于维护。此外,我很好奇这种行为是否是故意的。这将是一个很好的解决方案,但我不认为在源代码为
null
时使用转换器。自定义映射器可能是您唯一的选择,但考虑向维护者询问,最后我检查了他们在项目的谷歌邮件列表中的活动。谢谢您的建议!我会尽快更新我的帖子,只要我有更多的信息。你应该回答你自己的问题,如果你有解决办法的话就接受它。
.mapNulls(false)