Чтобы отобразить определенный объект mapstruct мне нужно некоторые пользовательские постобработку, которая нуждается дополнительный параметр, чтобы сделать это работа:Карта коллекции с параметром с mapstruct
@Mapper
public abstract class AlertConfigActionMapper {
@Mappings({ @Mapping(target = "label", ignore = true)})
public abstract AlertConfigActionTO map (AlertConfigAction action, Locale userLanguage);
@AfterMapping
public void setLabel (AlertConfigAction action, @MappingTarget AlertConfigActionTO to, Locale userLanguage) {
for (AlertConfigActionLabel label : action.getAlertConfigActionLabels()) {
if (label.getLanguage().equals(userLanguage)) {
to.setLabel(label.getLabel());
break;
} else if (label.getLanguage().equals(Locale.ENGLISH)) {
to.setLabel(label.getLabel());
}
}
}
}
Это работает просто отлично. Проблемы начинается, когда я добавляю следующий метод к этому картографу:
public abstract ArrayList<AlertConfigActionTO> mapList (List<AlertConfigAction> actions, Locale userLanguage);
мне нужно передать этот параметр (UserLanguage), а также, но mapstruct, кажется, «ломается» в данном случае: I генерирует следующий код для этой части (что, естественно, дает ошибку компиляции):
@Override
public List<AlertConfigActionTO> mapList(List<AlertConfigAction> actions, Locale userLanguage) {
if (actions == null && userLanguage == null) {
return null;
}
List<AlertConfigActionTO> list = new List<AlertConfigActionTO>();
return list;
}
Я уверен, что это связано с параметром, так как если я удалить его (из всех методов картографирования), то метод MapList правильно генерируется.
Что нужно сделать, чтобы разрешить настраиваемые параметры в этом случае?
Спасибо, создал https://github.com/mapstruct/mapstruct/issues/809 –
FYI: Поскольку я уже создал фасад в качестве обертки для фактических карт (чтобы отделить код от фактической реализации картера) Я просто просматриваю список отдельных элементов (AlertConfigAction) и сопоставляю их по отдельности. Всякий раз, когда эта функция будет поддерживаться, я могу просто обновить фасад. –