Да, вы можете использовать Обновление существующих экземпляров компонента из MapStruct для выполнения необходимых обновлений.
Отображатель будет выглядеть следующим образом:
@Mapper(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE, nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS)
public interface PersonMapper {
void update(@MappingTarget Person toUpdate, Person person);
void update(@MappingTarget Address toUpdate, Address address);
}
сгенерированный код для этого будет выглядеть следующим образом:
public class PersonMapperImpl implements PersonMapper {
@Override
public void update(Person toUpdate, Person person) {
if ( person == null ) {
return;
}
if ( person.getName() != null ) {
toUpdate.setName( person.getName() );
}
if ( person.getAddress() != null ) {
if ( toUpdate.getAddress() == null ) {
toUpdate.setAddress( new Address() );
}
update( toUpdate.getAddress(), person.getAddress() );
}
}
@Override
public void update(Address toUpdate, Address address) {
if ( address == null ) {
return;
}
if ( address.getStreet() != null ) {
toUpdate.setStreet( address.getStreet() );
}
if ( address.getHome() != null ) {
toUpdate.setHome( address.getHome() );
}
}
}
nullValuePropertyMappingStrategy
- стратегия, которая будет применяться, когда свойство исходного компонента null
или отсутствует.По умолчанию задано целевое значение null
nullValueCheckStrategy
- Определяет, когда включать проверку null
в значение свойства источника для отображения bean-компонента
NB nullValuePropertyMappingStrategy
взято из MapStruct 1.3.0.Beta2