MapStruct是否可以根据鉴别器属性确定抽象类/接口的具体类型?
想象一下具有两个子类SUV和City的目标抽象类CarEntity和一个具有两个枚举常量SUV和CITY的鉴别器字段类型的源类CarDto.如何告诉MapStruct根据源类中的鉴别器字段的值选择具体类?
方法签名通常是:
public abstract CarEntity entity2Dto(CarDto dto);
编辑
precision:CarDto没有任何子类.
解决方法:
如果我理解正确,目前这是不可能的.见#131.
实现你需要的方法是做一些事情,比如:
@Mapper
public interface MyMapper {
default CarEntity entity2Dto(CarDto dto) {
if (dto == null) {
return null;
} else if (dto instance of SuvDto) {
return fromSuv((SuvDto) dto));
} //You need to add the rest
}
SuvEntity fromSuv(SuvDto dto);
}
而不是做检查的实例.您可以使用鉴别器字段.
@Mapper
public interface MyMapper {
default CarEntity entity2Dto(CarDto dto) {
if (dto == null) {
return null;
} else if (Objects.equals(dto.getDiscriminator(), "suv")) {
return fromSuv(dto));
} //You need to add the rest
}
SuvEntity fromSuv(CarDto dto);
}