1. ホーム
  2. java

[解決済み] Spring RedirectAttributes: addAttribute() vs addFlashAttribute()

2023-07-14 12:54:03

質問

私の理解では、コントローラのリクエストマッピングメソッドで、以下のように指定することができます。 RedirectAttributes パラメータを指定し、そのパラメータにリクエストがリダイレクトされるときの属性を入力します。

:

@RequestMapping(value="/hello", method=GET)
public String hello(RedirectAttributes redirAttr)
{
   // should I use redirAttr.addAttribute() or redirAttr.addFlashAttribute() here ?

   // ...

   return "redirect:/somewhere";
}

そして、リダイレクト先のページでリダイレクト属性が利用できるようになります。

ただし RedirectAttributes クラスには2つのメソッドがあります。

しばらくSpringのドキュメントを読んでいますが、少し迷っています。基本的な の違い とは何か、そしてどのようにしてどちらを使うべきかを選択すべきでしょうか?

どのように解決するのですか?

ここでは の違いです。 :

  • addFlashAttribute() 実際に属性を格納するのは フラッシュマップ に格納されています (これは内部的にユーザー session で管理され に保持され、次のリダイレクトされたリクエストが実行されると削除されます)

  • addAttribute() は、基本的に リクエストパラメータ を構築します。 を構築し、そのリクエストパラメータで目的のページにリダイレクトします。 パラメータで目的のページにリダイレクトします。

では の利点 addFlashAttribute() には、ほとんどすべてのオブジェクトを格納することができます。 フラッシュ属性 (リクエストパラメータにシリアライズされず、オブジェクトとして維持されるため)一方 addAttribute() では、追加したオブジェクトは通常のリクエストパラメータに変換されるため、オブジェクトの種類は String やプリミティブのようなオブジェクトタイプにかなり制限されます。