Java 使用Orika将两个值映射到单个属性
假设我有一个源对象,包含两个属性,a和b,如下所示:Java 使用Orika将两个值映射到单个属性,java,orika,Java,Orika,假设我有一个源对象,包含两个属性,a和b,如下所示: public class Source { String a, b; } 以及具有一个属性c的目标对象: public class Target { String c; } 我想定义一个映射,它将: 如果a不为null,则将属性a映射到c 如果b不为空,则将属性b映射到c 我认为将mapNulls设置为false的映射器是可能的: factory.registerClassMap(factory.classMap(Sour
public class Source {
String a, b;
}
以及具有一个属性c的目标对象:
public class Target {
String c;
}
我想定义一个映射,它将:
factory.registerClassMap(factory.classMap(Source.class, Target.class).field("a", "c").field("b", "c").mapNulls(false));
但是,当我将属性a设置为非null值并将属性b保留为null时,映射会导致目标对象的c设置为null
我是否误解了mapNulls的用途?这是因为
mapNulls
在最后一个字段设置了属性。
尝试在两个字段中设置。您也可以实现
ConfigurableMapper
。这是因为mapNulls
在最后一个字段设置属性。
尝试在两个字段中设置。您也可以实现
ConfigurableMapper
。嗯,我从未尝试使用mapNulls
。在这些自定义规则中,我实现了一个ConfigurableMapper
,这是一些额外的工作,但似乎是合理的。可能是因为mapNulls
是字段级别的,请尝试为这两个字段设置mapNulls
。这似乎可以解决问题。所有这些看起来都有点不可靠,.field()返回用于方法链接的ClassMapBuilder,显然.setNulls()只影响最后添加的字段…mapNulls存在于MapperFactory/ClassMap/FieldMap级别上。。。最具体的级别可以覆盖更通用的级别。您还可以使用最新的方法(更简单)注册类映射:factory.classMap(Source.class,Target.class).field(“a”,“c”).field(“b”,“c”).mapNulls(false).register();嗯,我从未尝试过使用mapNulls
。在这些自定义规则中,我实现了一个ConfigurableMapper
,这是一些额外的工作,但似乎是合理的。可能是因为mapNulls
是字段级别的,请尝试为这两个字段设置mapNulls
。这似乎可以解决问题。所有这些看起来都有点不可靠,.field()返回用于方法链接的ClassMapBuilder,显然.setNulls()只影响最后添加的字段…mapNulls存在于MapperFactory/ClassMap/FieldMap级别上。。。最具体的级别可以覆盖更通用的级别。您还可以使用最新的方法(更简单)注册类映射:factory.classMap(Source.class,Target.class).field(“a”,“c”).field(“b”,“c”).mapNulls(false).register();