我的映射定义为
@Mapping(source = "diagnoses", target = "diagnosisCode", qualifiedByName = "mapDiagnosisCodeAsList")
mapDiagnosisCodeAsList
的定义如下:
@Named("mapDiagnosisCodeAsList")
default List<String> retrieveDiagnosisCodeAsList(List<Diagnosis> aList) {
if (CollectionUtils.isEmpty(aList)) {
return new ArrayList<>();
}
return aList.stream().map(Diagnosis::getDiagnosisCode).collect(Collectors.toList());
}
逆映射使用@InheritInverseConfiguration
处理。如何为逆映射指定自定义映射?
答案 0 :(得分:2)
为了使逆映射起作用,您还需要提供逆方法。
@Named("mapDiagnosisCodeAsList")
default List<Diagnosis> retrieveDiagnosisCodeAsList(List<String> aList) {
if (CollectionUtils.isEmpty(aList)) {
return new ArrayList<>();
}
return aList.stream().map(Diagnosis::new).collect(Collectors.toList());
}
另一注。我认为您真的不需要复杂的限定词就能完成这项工作。如果您只有一个Diagnosis
至String
并反转,则可以不使用限定符(甚至没有列表)也可以。
如果没有@Mapping
,您的qualifiedByName
将保持不变,并且您需要提供从Diagnosis
到String
以及相反的映射。
default String diagnosisToString(Diagnosis diagnosis) {
return diagnosis == null ? null : diagnosis.getDiagnosisCode();
}
default Diagnosis stringToDiagnosis(String diagnosisCode) {
return diagnosis == null ? null : new Diagnosis(diagnosisCode);
}
MapStruct将负责创建集合。
另外,我假设Diagnosis
有一个接受代码的构造函数。