Атрибут использования Mapstruct @ Mapper не работает - PullRequest
0 голосов
/ 23 октября 2018

Я сталкиваюсь с проблемой, когда один из моих картографов Mapstruct не использует другой картограф с @Mapper(uses =

Наши ValidationSupportNeedMapper карты из сущностей в DTO.Один ValidationSupportNeedEntity содержит свойство ActivityEntity, и я пытаюсь сопоставить это свойство с Activity DTO.

Поэтому проблема связана с вложенным объектом, то есть с ActivityEntity по Activity.

Вот исходный код:

С ValidationSupportNeedMapper.java :

@Mapper(uses = {LifecycleErrorMessagesMapper.class, ActivityMapper.class})
public interface ValidationSupportNeedMapper {

   ValidationSupportNeed toValidationSupportNeed(ValidationSupportNeedEntity source);

...

С ActivityMapper.java :

@Component
public class ActivityMapper {

    public Activity toActivity(ActivityEntity activity) {
       //Implementation
    }

    public ActivityEntity toActivityEntity(Activity activity) {
        //Implementation
    }

}

С ValidationSupportNeedEntity.java (Entity)

public class ValidationSupportNeedEntity {

    private ActivityEntity activityEntity;

С ValidationSupportNeed.java (DTO)

public class ValidationSupportNeed implements AutoValidated {
      private Activity validationActivity;

Однако Mapstruct, похоже, игнорирует атрибут uses= в аннотации @Mapper и продолжает работу и генерирует собственный метод отображения следующим образом:

   @Override
    public ValidationSupportNeed toValidationSupportNeed(ValidationSupportNeedEntity source) {
        if ( source == null ) {
            return null;
        }

        ValidationSupportNeed validationSupportNeed = new ValidationSupportNeed();

        validationSupportNeed.setValidationActivity( validationSupportNeedEntityToActivity( source ) );
    ...
  }

    protected Activity validationSupportNeedEntityToActivity(ValidationSupportNeedEntity validationSupportNeedEntity) {
        if ( validationSupportNeedEntity == null ) {
            return null;
        }

        Activity activity = new Activity();

        activity.setCode( validationSupportNeedEntity.getValidationActivityCode() );

        return activity;
    }

Чего мне не хватает?Может кто-нибудь помочь, пожалуйста?

edit : ActivityMapper не подключен автоматически в реализацию ValidationSupportNeedMapper.

1 Ответ

0 голосов
/ 23 октября 2018

Добавление аннотации сопоставления позволило решить проблему:

@Mapping(source = "activityEntity", target = "validationActivity")
ValidationSupportNeed toValidationSupportNeed(ValidationSupportNeedEntity source);

Обратите внимание, что имена атрибутов различны.

...