MapStruct将映射从一种方法转换为具有固有类的返回类型的另一种方法

问题描述 投票:2回答:1

我最近开始使用MapStruct,并且对此有疑问。这样就可以将映射从一个方法继承到用于映射先前方法输出的子类的另一种方法。

例如,如果我有一个Car类需要映射到两个类FourWheeler和DetailedFourWheeler(扩展了FourWheeler类),我可以使用为将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 {
    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应该从以前的方法中引入颜色和品牌的映射。

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

java mapstruct
1个回答
0
投票

MapStruct具有@InheritConfiguration批注,它将完成您要查找的内容。有关更多信息,请参阅文档中的Mapping configuration inheritance

在任何情况下,如果DetailedFourWheeler不扩展FourWheeler,它都将不起作用,因为没有它,MapStruct无法知道类型是否已释放。

© www.soinside.com 2019 - 2024. All rights reserved.