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

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);
}
上一篇:Mapstruct忽略目标嵌套属性映射


下一篇:MapStruct - 简单Java Bean映射