MapStruct 中 @SubclassMapping 与 expression 的联合使用
在 MapStruct 中,@SubclassMapping 注解用于在多态类型映射中指定子类的映射规则。它可以与 expression 属性一起使用,以定义一个条件表达式,决定将父类对象映射到哪个子类对象。
使用 @SubclassMapping 需要以下步骤:
- 在父类和子类的映射接口中定义相应的映射方法。
- 在父类的映射方法上使用 @SubclassMapping 注解,并设置 target 属性为子类的类型。
- 在 @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 对象。
原文地址: https://www.cveoy.top/t/topic/qeN0 著作权归作者所有。请勿转载和采集!