Mapstruct: абстрактный целевой класс и конкретный тип на основе поля дискриминатора - PullRequest
0 голосов
/ 01 июня 2018

Возможно ли с помощью MapStruct определить конкретный тип абстрактного класса / интерфейса на основе свойства дискриминатора?

Представьте себе целевой абстрактный класс CarEntity с двумя подклассами SUV и City иисходный класс CarDto с полем дискриминатора type с двумя константами перечисления SUV и CITY.Как вы говорите MapStruct выбирать конкретный класс на основе значения поля дискриминатора в исходном классе?

Подпись метода обычно будет:

public abstract CarEntity entity2Dto(CarDto dto);

EDIT

точность: CarDto не имеет подклассов.

1 Ответ

0 голосов
/ 01 июня 2018

Если я правильно понял, это в настоящее время невозможно.См. # 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);
}
...