首页 > 解决方案 > 如何在 Mapstruct 中管理阴影

问题描述

public abstract class CaseDTOBase{

       private Integer version;

       public static void mapFromCaseToCaseDTO(Fall fall, CaseDTOBase caseDTOBase) {
        caseDTOBase.setVersion(fall.getVersion());}
       }
    }

public class AufCaseDTO extends CaseDTOBase{

  private Integer version;

  public static AufCaseDTO from(AufFall aufFall, Fall fallGemeldetAnPKR) {

  AufCaseDTO aufCaseDTO = AufCaseDTO.builder().version(aufFall.getVersion()).build();

  CaseDTOBase.mapFromCaseToCaseDTO(aufFall.getFall(), aufCaseDTO);

  return aufCaseDTO;
 }
}

正如您所看到的,一个变量使用 aufFall.getVersion() 而另一个版本变量使用 aufFall.getFall().getVersion(),我不能在 MapStruct 中同时添加这两个变量,因为它说它不允许重复。我怎样才能在 MapStruct 中做到这一点?

    @Mapping(target = "version", source = "aufFall.version")  
    @Mapping(target = "version", source = "aufFall.fall.version")

    @Mapping(target = "pksamAufFallDTO", source = "aufFall")
    AufCaseDTO from(AufFall aufFall, Fall fallGemeldetAnPKR);

标签: mapstruct

解决方案


MapStruct 不支持target在多个映射中使用相同的属性。为了实现您正在寻找的东西,您必须为它编写自己的方法。

例如

@Mapper
public interface MyMapper {

    @Mapping(target = "version", source = "aufFall", qualifiedByName = "aufFallToVersion")
    @Mapping(target = "pksamAufFallDTO", source = "aufFall")
    AufCaseDTO from(AufFall aufFall, Fall fallGemeldetAnPKR);

    @Named("aufFallToVersion")
    default Integer toVersion(AufFall AufFall) {
        if (aufFall == null) {
            return null;
        }

        if (aufFall.getVersion() != null) {
            return aufFall.getVersion();
        } else if (aufFall.getFall() != null && aufFall.getFall().getVersion() != null) {
            return aufFall.getFall().getVersion();
        } else {
            return null;
        }
    }
}

推荐阅读