Просто найдите хороший способ реализации пользовательского кода для сопоставления одного объекта:
@Mapping(target = "sender", expression = "java(new YourClass(null, messageEntity.getSenderType(), messageEntity.getSenderID(), messageEntity.getSenderContact()))")
Таким образом, с помощью выражения вы можете определить собственный код, все еще используя определения mapstruct.
На всякий случай вам может понадобиться импортировать класс, не определенный как исходный или целевой, просто не забудьте аннотировать класс следующим образом, чтобы позволить mapstruct импортировать необходимый класс:
@Mapper(imports = YourClass.class)