Mapstruct:抽象源类错误:没有属性命名
Posted
技术标签:
【中文标题】Mapstruct:抽象源类错误:没有属性命名【英文标题】:Mapstruct: Abstract source class error: No property named 【发布时间】:2022-01-23 00:22:00 【问题描述】:我有一个抽象类,我应该使用 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”的属性。
如何使这些字段成为可选字段,以便在源类中没有退出时它们具有默认值?
【问题讨论】:
【参考方案1】:对于这个特定示例,新的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 将在不同目标类型之间创建隐式映射,并且属性将被隐式映射。
【讨论】:
非常感谢您的帮助,我很高兴开发/维护 Mapstruct 的人在这里非常活跃 :) 使用 @SubclassMapping 它会引发 *** 异常,所以我必须实现:@ 987654324@ 和CarDto toTarget(ElectricCar source)
然后它工作了
不应该有 ***。您能否在 MapStruct 问题跟踪器中创建一个问题,以便我们查看?以上是关于Mapstruct:抽象源类错误:没有属性命名的主要内容,如果未能解决你的问题,请参考以下文章
使用 mapstruct 进行映射:错误:(22,48)java:参数“quote”的类型没有名为“quote_type”的属性