【问题标题】:MapStruct utilize Mappings from a method into another method having return type of an inherent classMapStruct 利用从一个方法到另一个方法的映射,该方法具有固有类的返回类型
【发布时间】:2020-09-14 15:51:01
【问题描述】:

我最近开始使用 MapStruct 并且有这个疑问。那么是否可以将一个方法的映射继承到另一个用于映射前一个方法输出的子类的方法中。

例如 - 如果我有一个类 Car 需要映射到两个类 FourWheeler 和DetailedFourWheeler(它扩展了 FourWheeler 类),我可以使用为将 Car 转换为 FourWheeler 定义的映射到我的方法中将 Car 转换为详细四轮车? 这是示例代码 -

@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 应该从之前的方法中引入颜色和品牌的映射。

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

【问题讨论】:

    标签: java mapstruct


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-05-13
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-21
      • 1970-01-01
      相关资源
      最近更新 更多