Чтобы сопоставить определенный объект с 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, похоже, "сломается" в этом случае: я генерирую следующий код для этой части (что естественно дает ошибку компиляции):
@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 будет сгенерирован правильно.
Что нужно сделать для разрешения пользовательских параметров в этом случае?