読者です 読者をやめる 読者になる 読者になる

RedirectAttributes#addFlashAttributeしたオブジェクトをリダイレクト先のControllerで受け取る方法

Java Spring

リダイレクト先のControllerのアクションメソッドに、@ModelAttributeを付与した引数を設定すれば良い。下記のような感じ。

@RequestMapping("/page1")
public String page1(RedirectAttributes attributes) {
  attributes.addFlashAttribute("attr1", "flashdata");
  return "redirect:/page2";
}

@RequestMapping("/page2")
public String page2(@ModelAttribute("attr1") attr1, Model model) {
  // attr1 == "flashdata"
  model.addAttribute("attr");
}


ちなみに、RedirectAttributes#addFlashAttributeでフラッシュスコープにつっこんだオブジェクトは、リダイレクトした場合だけ(RedirectViewが処理した場合だけ)しか処理されず、かつ生存期間を延長することもできないため、railsのflashなどに比べて非常に限定的な用途(リダイレクト時のView向けデータ運搬)にしか使えない。

つまり、真にセッションスコープでないデータの格納*1先としてのHttpSessionの代替にはならない、という認識。

参考:

*1:例えば、複数画面に渡りユーザ入力値を運搬しなければならない場合など