Java Orika:未对空值调用CustomConverter
我正在使用Orika 1.4.6,我想使用CustomConverter映射我的一个字段。当source字段为null时,似乎不会调用转换器。这是我的密码: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
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)