在 MapStruct 中,@SubclassMapping 注解用于在多态类型映射中指定子类的映射规则。它可以与 expression 属性一起使用,以定义一个条件表达式,决定将父类对象映射到哪个子类对象。

使用 @SubclassMapping 需要以下步骤:

  1. 在父类和子类的映射接口中定义相应的映射方法。
  2. 在父类的映射方法上使用 @SubclassMapping 注解,并设置 target 属性为子类的类型。
  3. 在 @SubclassMapping 注解中使用 expression 属性来定义一个条件表达式,该表达式返回 true 时,才会执行当前的子类映射规则。

以下是一个示例:

@Mapper
public interface VehicleMapper {
    @SubclassMapping(source = Car.class, target = CarDto.class, expression = "java(car.getEngine().getType().equals('electric'))")
    VehicleDto mapToDto(Vehicle vehicle);

    CarDto mapToDto(Car car);

    BikeDto mapToDto(Bike bike);
}

在上面的示例中,我们定义了一个 VehicleMapper 接口,其中包含了一个 mapToDto 方法用于将 Vehicle 对象映射为 VehicleDto 对象。在该方法上,我们使用了 @SubclassMapping 注解,并设置 target 属性为 CarDto.class,expression 属性为一个条件表达式,即当 car 的引擎类型为 'electric' 时,才执行该映射规则。

这样,在调用 mapToDto 方法时,如果传入的 Vehicle 对象是一个 Car 对象,并且其引擎类型为 'electric',则会执行子类映射规则,将其映射为 CarDto 对象;否则,将执行默认的父类映射规则,将其映射为 VehicleDto 对象。

MapStruct 中 @SubclassMapping 与 expression 的联合使用

原文地址: https://www.cveoy.top/t/topic/qeN0 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录