MapStruct использует сопоставления из метода в другой метод, имеющий тип возвращаемого значения собственного класса. - PullRequest
2 голосов
/ 27 мая 2020

Я начал использовать MapStruct недавно и сомневался. Так можно ли наследовать сопоставления от одного метода к другому методу, который используется для сопоставления подкласса выходных данных предыдущего метода.

Например - если у меня есть класс Car, который необходимо сопоставить с двумя классами FourWheeler и DetailFourWheeler (который расширяет класс FourWheeler), могу ли я использовать сопоставления, определенные для преобразования Car в FourWheeler, в мой метод, который преобразует Car в DetailFourWheeler? Вот пример кода -

@lombok.Data
public class Car {
    private String color;
    private String brand;
    private String variant;
}

@lombok.Data
public class FourWheeler {
    private String paint;
    private String company;
}

@lombok.Data
public class DetailedFourWheeler extends FourWheeler {
    private String model;
}

My Mapper для этого выглядит так -

@Mapper
interface FourWheelerMapper {

    public static final FourWheelerMapper INSTANCE = Mappers.getMapper(FourWheelerMapper.class);

    @Mappings({
            @Mapping(source = "color", target = "paint"),
            @Mapping(source = "brand", target = "company")
    })
    FourWheeler mapToFourWheeler(Car car);

    @Mappings({
            @Mapping(source = "color", target = "paint"),
            @Mapping(source = "brand", target = "company"),
            @Mapping(source = "variant", target = "model")
    })
    DetailedFourWheeler mapToDetailedFourWheeler(Car car);
}

Я хочу знать, можно ли изменить mapToDetailedFourWheeler, например -

@InheritMappingsFromParent
@Mappings({
    @Mapping(source = "variant", target = "model")
})
DetailedFourWheeler mapToDetailedFourWheeler(Car car);

Здесь мой InheritMappingsFromParent должен внести сопоставления для цвета и бренда из предыдущего метода.

Мне не удалось найти что-то относящееся к этому в документации. Спасибо

1 Ответ

1 голос
/ 30 мая 2020

MapStruct имеет аннотацию @InheritConfiguration, которая сделает то, что вы ищете. Для получения дополнительной информации посмотрите Наследование конфигурации сопоставления в документации.

В любом случае для вас это не сработает, если DetailedFourWheeler не расширяет FourWheeler, так как без этого нет MapStruct не может узнать, связаны ли типы.

...