首页 > 解决方案 > Mapstruct @Mapper 的使用属性不起作用

问题描述

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

我们ValidationSupportNeedMapper从实体映射到 DTO。一个ValidationSupportNeedEntity包含一个ActivityEntity属性,我试图从这个属性映射到一个ActivityDTO。

因此,问题在于嵌套对象,即ActivityEntityto 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(实体)

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

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

编辑ActivityMapper没有自动装配到ValidationSupportNeedMapper实现中。

标签: mapstruct

解决方案


添加映射注释对问题进行了排序:

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

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


推荐阅读