Mapstruct:基于鉴别器字段的抽象目标类和具体类型

时间:2018-06-01 12:38:55

标签: java mapstruct

MapStruct是否可以根据鉴别器属性确定抽象类/接口的具体类型?

想象一个目标抽象类CarEntity,它有两个子类SUVCity,源类CarDto带有一个带有两个枚举常量的鉴别字段type { {1}}和SUV。你如何告诉MapStruct根据源类中鉴别器字段的值选择具体类?

方法签名通常是:

CITY

修改

precision:public abstract CarEntity entity2Dto(CarDto dto); 没有任何子类。

1 个答案:

答案 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);
}