Java 使用Orika将两个值映射到单个属性

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

假设我有一个源对象,包含两个属性,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(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();