Java 如何在嵌套的Mapstruct映射器中指定在不明确的映射方法中进行选择?

Java 如何在嵌套的Mapstruct映射器中指定在不明确的映射方法中进行选择?,java,mapstruct,Java,Mapstruct,我们有一种特殊情况,在这种情况下,Mapstruct映射器可以从其依赖项(即ProductionPlanDetailAutoMapper)中选择两种不同的替代方法,但是,如果无法选择,则返回编译错误SupplyPlanProjectionAutoMapper.java无法将值“java.util.List”映射到“java.util.List”。考虑声明/实现映射方法:“java. UTILIST MAP(JavaUTILIST值)”.< /代码> 源代码由2个映射器组成:概述及其各自的代码:

我们有一种特殊情况,在这种情况下,Mapstruct映射器可以从其依赖项(即ProductionPlanDetailAutoMapper)中选择两种不同的替代方法,但是,如果无法选择,则返回编译错误
SupplyPlanProjectionAutoMapper.java无法将值“java.util.List”映射到“java.util.List”。考虑声明/实现映射方法:“java. UTILIST MAP(JavaUTILIST值)”.< /代码> 

源代码由2个映射器组成:概述及其各自的代码:

制图员1:

@Mapper(componentModel = "spring", uses={ProductionPlanDetailAutoMapper.class}) 
public interface SupplyPlanProjectionAutoMapper {

    @Mapping(source = "material.id", target = "materialId")
    public PlanningProjectionDTO convert(PlanningProjection);
    
    public Map<PlanningProjectionDTO, List<ProductionPlanDetailDTO>> convertMapProductionPlanDetail (Map<PlanningProjection, List<ProductionPlanDetail>> map);
}

虽然Mapstruct开发人员没有在文档中考虑过它。在梳理文档时,我发现:

解决方案是使用MapMapping并指定应使用2个@Name方法中的哪一个来填充映射的值部分(列表(ProductionPlanDetail)所在的位置):

@MapMapping(valueQualifiedByName = "convertToDTOListWithRecipeDetail")
public Map<PlanningProjectionDTO, List<ProductionPlanDetailDTO>> convertMapProductionPlanDetail (Map<PlanningProjection, List<ProductionPlanDetail>> map);
@MapMapping(valueQualifiedByName=“converttoListWithRecipedDetail”)
公共地图转换MapProductionPlanDetail(地图地图);
这非常优雅地解决了这个问题。另一方面,如果转换问题存在于映射键中,则应改用@MapMapping#keyQualifiedByName

@IterableMapping(qualifiedByName = "convertToListWithRecipeDetail")
@MapMapping(valueQualifiedByName = "convertToDTOListWithRecipeDetail")
public Map<PlanningProjectionDTO, List<ProductionPlanDetailDTO>> convertMapProductionPlanDetail (Map<PlanningProjection, List<ProductionPlanDetail>> map);