Mapstruct — сопоставление ресурсов, когда цель имеет значение null

Рассмотрим приведенные ниже коды, если engine равно нулю, я не хочу его сопоставлять. Как мне это сделать?

@Mapper
public interface CarMapper {

    @Mapping(target = "engine", source = "device")
    void updateCarFromDto(CarDto carDto, @MappingTarget Car car);
}

@Reilas, твой предложенный вопрос when source is null, а мой вопрос when target is null

ikhvjs 24.05.2023 23:10

Попробуйте этот вопрос. Они имеют в виду перечисление NullValuePropertyMappingStrategy; возможно другое значение?

Reilas 24.05.2023 23:16

@Reilas, из предложенного вами вопроса: я пытаюсь добиться только map fields in source into target only when the fields in target are null. Вместо этого я хочу игнорировать.

ikhvjs 24.05.2023 23:22

Также NullValuePropertyMappingStrategy управляйте только источником, но не целью.

ikhvjs 24.05.2023 23:25

Итак, на GitHub есть похожий вопрос для установки значений только тогда, когда поля в target пусты.

Reilas 24.05.2023 23:47

@Рейлас, спасибо. поэтому у MapStruct нет встроенной поддержки, и я оставляю свой ответ для справки.

ikhvjs 25.05.2023 15:01

Какая версия используемого Mapstruct?

fatih 25.05.2023 17:33

@fatih 1.5.5.Финал

ikhvjs 25.05.2023 19:32
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
8
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мы можем использовать ignore и @AfterMapping.

@Mapper
public interface CarMapper {

    @Mapping(target = "engine", ignore = "true")
    void updateCarFromDto(CarDto carDto, @MappingTarget Car car);

    @AfterMapping
    default void update(CarDto carDto, @MappingTarget Car car) {
        if (car == null || carDto == null) {
            return;
        }

        if (car.getEngine != null)
            car.setEngine(carDto.getDevice);
            
    }
}

Другие вопросы по теме