Переименовал метод — поменял маппинг

Поймали занятный подводный камень MapStruct.

В DTO есть список items и метод:

public boolean hasItems() { return items != null && !items.isEmpty(); }

Вроде обычная проверка. Но MapStruct видит в hasItems() проверку присутствия свойства items и генерирует:

if (dto.hasItems()) { target.items(new ArrayList<>(dto.getItems())); }

Пустой список? Проверка вернёт false, присваивания не будет. В нашем случае вместо [] получаем null в целевом поле. Сам объект при этом создаётся.

Раньше метод назывался hasResults() и на маппинг items не влиял. Переименовали в hasItemsCheck() — пустая коллекция снова переносится.

@JsonIgnore не спасает: это аннотация Jackson. Проверили и NullValueCheckStrategy.ALWAYS — presence checker всё равно используется.

Вот тебе и безобидное переименование метода.

Документация MapStruct

Переименовал метод — поменял маппинг
Поймали занятный подводный камень MapStruct.
В DTO есть список items и метод:
public boolean hasItems() {
return items != null && !items | Сетка — социальная сеть от hh.ru