要使用 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 方法就会正确生成。
在这种情况下需要做些什么来允许自定义参数?