代码之家  ›  专栏  ›  技术社区  ›  balteo

Mapstruct@Mapper的uses属性无效

  •  0
  • balteo  · 技术社区  · 6 年前

    @Mapper(uses =

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

    因此,问题在于嵌套对象,即。 活动 .

    以下是源代码:

    验证支持NeedMapper.java

    @Mapper(uses = {LifecycleErrorMessagesMapper.class, ActivityMapper.class})
    public interface ValidationSupportNeedMapper {
    
       ValidationSupportNeed toValidationSupportNeed(ValidationSupportNeedEntity source);
    
    ...
    

    :

    @Component
    public class ActivityMapper {
    
        public Activity toActivity(ActivityEntity activity) {
           //Implementation
        }
    
        public ActivityEntity toActivityEntity(Activity activity) {
            //Implementation
        }
    
    }
    

    public class ValidationSupportNeedEntity {
    
        private ActivityEntity activityEntity;
    

    验证支持需求.java (DTO)

    public class ValidationSupportNeed implements AutoValidated {
          private Activity validationActivity;
    

    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 不是自动连接到 验证支持NeedMapper 实施。

    1 回复  |  直到 6 年前
        1
  •  4
  •   Filip    6 年前

    添加映射注释解决了问题:

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