MapStruct 利用映射从一个方法到另一个具有 return 类型的固有 class 的方法

MapStruct utilize Mappings from a method into another method having return type of an inherent class

最近开始用MapStruct,有这个疑惑。那么是否可以将映射从一种方法继承到另一种方法,该方法用于映射前一种方法输出的子class。

例如 - 如果我有一辆 class 汽车需要映射成两个 classes FourWheeler 和 DetailedFourWheeler(它扩展了 FourWheeler class)我可以使用映射为将 Car 转换为 FourWheeler 定义为我将 Car 转换为 DetailedFourWheeler 的方法? 这是示例代码 -

@lombok.Data
public class Car {
    private String color;
    private String brand;
    private String variant;
}

@lombok.Data
public class FourWheeler {
    private String paint;
    private String company;
}

@lombok.Data
public class DetailedFourWheeler extends FourWheeler {
    private String model;
}

我的映射器看起来像 -

@Mapper
interface FourWheelerMapper {

    public static final FourWheelerMapper INSTANCE = Mappers.getMapper(FourWheelerMapper.class);

    @Mappings({
            @Mapping(source = "color", target = "paint"),
            @Mapping(source = "brand", target = "company")
    })
    FourWheeler mapToFourWheeler(Car car);

    @Mappings({
            @Mapping(source = "color", target = "paint"),
            @Mapping(source = "brand", target = "company"),
            @Mapping(source = "variant", target = "model")
    })
    DetailedFourWheeler mapToDetailedFourWheeler(Car car);
}

我想知道是否可以像这样更改 mapToDetailedFourWheeler -

@InheritMappingsFromParent
@Mappings({
    @Mapping(source = "variant", target = "model")
})
DetailedFourWheeler mapToDetailedFourWheeler(Car car);

这里我的 InheritMappingsFromParent 应该从以前的方法中引入颜色和品牌的映射。

我无法在文档中找到与此相关的内容。 谢谢

MapStruct 具有 @InheritConfiguration 注释,可以满足您的需求。查看文档中的 Mapping configuration inheritance 了解更多信息。

在任何情况下,如果 DetailedFourWheeler 不扩展 FourWheeler,它就不会工作,因为如果没有它,MapStruct 就无法知道类型是相关的。