Mapstruct @Mapper 的使用属性不起作用

Mapstruct @Mapper's uses attribute not working

我遇到一个问题,我的一个 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 实现中。

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

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

请注意属性的名称不同。