特定のオブジェクトを 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メソッドが正しく生成されるため、パラメーターに関連していると確信しています。
この場合、カスタム パラメータを許可するにはどうすればよいですか?