如何在ModelMapper中表达以下内容:要在目标中填充一个字段,如果它是非空的,我想使用源的属性A,否则使用属性B。
示例(如果您不喜欢技术描述,请使用下面的代码):假设我想使用 ModelMapper从源类SourceBigThing
到目标类。有两个属性,一个是被调用Target
的,一个是被调用的。这两个属性是不同的类型和。这两个东西都有一个叫做 的属性。A可以有红色或绿色,但不能两者都有(另一个为空)。我想将 Small Things 的名称映射到目标类的属性。SourceBigThing
red
green
RedSmallThing
GreenSmallThing
name
SourceBigThing
示例代码:
class SourceBigThing {
private final SourceSmallThingGreen green;
private final SourceSmallThingRed red;
}
class SourceSmallThingGreen {
private final String name;
}
class SourceSmallThingRed {
private final String name;
}
class Target {
private TargetColorThing thing;
}
class TargetColorThing {
// This property should either be "green.name" or "red.name" depending
// on if red or green are !=null
private String name;
}
我试图玩弄条件,但你不能有两个映射到同一个目标,因为 ModelMapper 会为重复映射抛出异常:
when(Conditions.isNotNull()).map(source.getGreen()).setThing(null);
when(Conditions.isNotNull()).map(source.getRed()).setThing(null);
您可以在此 gist中找到失败的 TestNG-Unit-Test 。