Java 使用mapstruct的自定义映射器进行反向映射
我有一个映射定义为Java 使用mapstruct的自定义映射器进行反向映射,java,mapstruct,Java,Mapstruct,我有一个映射定义为 @Mapping(source = "diagnoses", target = "diagnosisCode", qualifiedByName = "mapDiagnosisCodeAsList") 其中,MapDiagnosisCodeList定义如下: @Named("mapDiagnosisCodeAsList") default List<String> retrieveDiagnosisCodeAsList(List<Diagnosis>
@Mapping(source = "diagnoses", target = "diagnosisCode", qualifiedByName = "mapDiagnosisCodeAsList")
其中,MapDiagnosisCodeList
定义如下:
@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());
}
@Named(“MapDiagnosisCodeList”)
默认列表检索诊断数据列表(列表列表){
if(CollectionUtils.isEmpty(aList)){
返回新的ArrayList();
}
返回aList.stream();
}
使用
@inheritinverseconformation
处理反向映射。如何为反向映射指定自定义映射?为了使反向映射正常工作,您还需要提供反向方法
@Named(“MapDiagnosisCodeList”)
默认列表检索诊断数据列表(列表列表){
if(CollectionUtils.isEmpty(aList)){
返回新的ArrayList();
}
返回aList.stream().map(Diagnosis::new).collect(Collectors.toList());
}
另一个旁注。我认为你并不需要复杂的限定词来实现这一点。如果您只有一个诊断
到字符串
并反向执行,则可以不使用限定符(即使没有列表)执行诊断
您的@Mapping
在没有qualifiedByName
的情况下将保持不变,并且您需要提供从诊断
到字符串
的映射,并进行反向操作
默认字符串诊断字符串(诊断){
返回diagnosis==null?null:diagnosis.getDiagnosisCode();
}
默认诊断字符串诊断(字符串诊断代码){
返回诊断==null?null:新诊断(diagnosisCode);
}
集合的创建将由MapStruct负责。
我还假设Diagnosis
有一个接受代码的构造函数