#java #mapstruct
#Ява #структура карты
Вопрос:
Я хочу создать проверки на пустоту сопоставленных свойств моих исходных объектов и установить значение по умолчанию, если действительно исходное свойство равно null.
Я пытался использовать стратегию NullValuePropertyMappingStrategy.УСТАНОВИТЕ значение по умолчанию для @Mapper, а также для целей @Mapping, но сгенерированный код не включал установщики по умолчанию..
Так что в основном то, чего я пытаюсь достичь, это:
@Mapper(componentModel = "spring") public interface OperationDataMapper { OperationDTO from(Object 1 o1, Object2 o2); }
Так что мой сгенерированный код станет:
@Component public class OperationDataMapperImpl implements OperationDataMapper { @Override public OperationDTO from(Object 1 o1, Object2 o2) { if ( o1 == null amp;amp; o2 == null ) { return null; } OperationDTO operationDTO = new OperationDTO(); if ( o1 != null ) { if(o1.getProp1() != null) { operationDTO.setProp1( o1.getProp1() ) } else { operationDTO.setProp1( "" ) // if property is a string for example } . . } if ( o2 != null ) { if(o2.getProp2() != null) { operationDTO.setProp2( o2.getProp2() ) } else { operationDTO.setProp2( "" ) // if property is a string for example } . . } return operationDTO; } }
Я не написал свой пример со стратегией значений по умолчанию, как указано в документации, потому что он не работал при моих попытках сопоставить вложенные свойства со значениями null.. Достаточно интересно, что стратегия NullValueCheckStrategy работает без каких-либо проблем, а стратегия NullValuePropertyMappingStrategy-нет.
Я также попытался установить их с помощью @BeanMapping, но безрезультатно.
Если бы кто-нибудь мог, пожалуйста, указать мне правильное направление, я был бы признателен!
Ответ №1:
Он NullValuePropertyMappingStrategy
предназначен для использования для сопоставления обновлений. Если вы хотите, чтобы это было применено, вам придется предоставить OperationDTO
@MappingTarget
разрешение .
Единственный способ достичь того, что вы ищете, — это использовать Mapping#defaultValue
или Mapping#defaultExpression