Как я могу выразить следующее в ModelMapper: чтобы заполнить поле в цели, я хочу использовать свойство A источника, если оно не равно нулю, в противном случае используйте свойство B.
Пример (код ниже, если вам не нравятся технические описания): допустим, я хочу перейти от исходного класса SourceBigThing
к целевому классу Target
с помощью ModelMapper. 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);
Вы можете найти неудачный TestNG-Unit-Test в этой сути .