【问题标题】:Mapstruct @Mapper's uses attribute not workingMapstruct @Mapper 的使用属性不起作用
【发布时间】:2019-03-27 14:03:59
【问题描述】:

我的一个 Mapstruct 映射器没有使用另一个带有 @Mapper(uses =

的映射器时遇到问题

我们的ValidationSupportNeedMapper 从实体映射到 DTO。一个ValidationSupportNeedEntity 包含ActivityEntity 属性,我正在尝试从该属性映射到Activity DTO。

因此,问题在于嵌套对象,即 ActivityEntityActivity

这里是源代码:

来自 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(实体)

public class ValidationSupportNeedEntity {

    private ActivityEntity activityEntity;

来自 ValidationSupportNeed.java (DTO)

public class ValidationSupportNeed implements AutoValidated {
      private Activity validationActivity;

然而 Mapstruct 似乎忽略了@Mapper 注释上的 uses= 属性,并继续生成自己的映射方法,如下所示:

   @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;
    }

我错过了什么?有人可以帮忙吗?

编辑ActivityMapper 不会自动装配到 ValidationSupportNeedMapper 实现中。

【问题讨论】:

    标签: mapstruct


    【解决方案1】:

    添加映射注释可以解决问题:

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

    注意属性的名称是不同的。

    【讨论】:

      猜你喜欢
      • 2020-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-27
      • 2016-04-12
      • 1970-01-01
      相关资源
      最近更新 更多