MapStruct是否可以根据鉴别器属性确定抽象类/接口的具体类型?
想象一个目标抽象类CarEntity
,它有两个子类SUV
和City
,源类CarDto
带有一个带有两个枚举常量的鉴别字段type
{ {1}}和SUV
。你如何告诉MapStruct根据源类中鉴别器字段的值选择具体类?
方法签名通常是:
CITY
修改
precision:public abstract CarEntity entity2Dto(CarDto dto);
没有任何子类。
答案 0 :(得分:3)
如果我理解正确,目前这是不可能的。请参阅#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);
}