Mapstruct: Abstract source class error: No property named
Mapstruct: Abstract source class error: No property named
我有一个摘要 class,我应该使用 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);
}
映射器将失败并出现错误:错误:没有 属性 名为“batteryCapacity”。
如何使这些字段可选,以便在源中没有退出时它们具有默认值 class?
对于这个特定的例子,新的 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 将在不同目标类型之间创建隐式映射,并且属性将被隐式映射。
我有一个摘要 class,我应该使用 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);
}
映射器将失败并出现错误:错误:没有 属性 名为“batteryCapacity”。
如何使这些字段可选,以便在源中没有退出时它们具有默认值 class?
对于这个特定的例子,新的 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 将在不同目标类型之间创建隐式映射,并且属性将被隐式映射。