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
有一个接受代码的构造函数