mapstruct - 如何在 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 不支持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;
}
}
}
推荐阅读
- php - 如何在 NextCloud 应用程序中使用 FlySystem 进行存储?
- python - 如何获得一条线上的曲线点?
- c++ - 使用Qt将javascript转储数组解析为点列表
- java - 对抽象方法执行通用初始化步骤
- mysql - 使用 selectizeGroupUI 创建数据输入表单以将数据输入数据表 (SQL)
- google-apps-script - 从 GAS 请求 WebApp(在 GSheets 中)
- angular - 用管道加载的 img src 未知
- kotlin - Unit 和 { } 的区别
- python - Pandas:在索引之后获取第一个值(不取决于索引类型)
- python - Python:Tkinter 按钮没有出现