Mapstruct:抽象源类错误:没有命名的属性



我有一个抽象类,应该使用Mapstruct:映射到DTO中

@Data    
public abstract class Car {
private String color;
}
@Data
public class ElectricCar extends Car {
private Double batteryCapacity;
}
@Data
public class FuelCar extends Car {
private Double engineSize;
}
@Data
public class CarDto {
private String color;
private Double batteryCapacity;
private Double engineSize;
}
@Mapper
public interface CarMapper {
@Mapping( source = "batteryCapacity", target="battery")
@Mapping( source = "engineSize", target="engine")
CarDto toTarget(Car source);
}

映射程序将失败,并出现错误:错误:没有名为"的属性;电池容量";。

如何使这些字段可选,以便在源类中没有退出时具有默认值?

对于这个特定的示例,新的SubclassMapping将起作用。

例如

@Mapper
public interface CarMapper {
@SubclassMapping( target = CarDto.class, source = FuelCar.class)
@SubclassMapping( target = CarDto.class, source = ElectricCar.class)
CarDto toTarget(Car source);
}

正如您所看到的,不需要定义特定的@Mapping注释,因为MapStruct将在不同的目标类型之间创建隐式映射,并且属性将被隐式映射。

相关内容

  • 没有找到相关文章

最新更新