リダイレクト属性

デフォルトでは、すべてのモデル属性はリダイレクト URL の URI テンプレート変数として公開されていると見なされます。残りの属性のうち、プリミティブ型またはプリミティブ型のコレクションまたは配列である属性は、クエリパラメーターとして自動的に追加されます。

モデルインスタンスがリダイレクト用に特別に準備されている場合、プリミティブ型の属性をクエリパラメーターとして追加することが望ましい結果になる場合があります。ただし、アノテーション付きコントローラーでは、モデルにレンダリング目的で追加された追加属性(ドロップダウンフィールド値など)を含めることができます。そのような属性が URL に現れる可能性を避けるために、@RequestMapping メソッドは、型 RedirectAttributes の引数を宣言し、それを使用して RedirectView で使用可能にする正確な属性を指定できます。メソッドがリダイレクトする場合、RedirectAttributes のコンテンツが使用されます。それ以外の場合、モデルのコンテンツが使用されます。

RequestMappingHandlerAdapter は ignoreDefaultModelOnRedirect と呼ばれるフラグを提供します。これを使用して、コントローラーメソッドがリダイレクトする場合、デフォルトの Model のコンテンツを使用しないことを示すことができます。代わりに、コントローラーメソッドは RedirectAttributes 型の属性を宣言する必要があります。そうしない場合は、RedirectView に属性を渡さないでください。MVC 名前空間と MVC Java 構成の両方は、後方互換性を維持するために、このフラグを false に設定したままにします。ただし、新しいアプリケーションの場合は、true に設定することをお勧めします。

現在のリクエストの URI テンプレート変数は、リダイレクト URL を展開するときに自動的に利用可能になり、Model または RedirectAttributes を介して明示的に追加する必要がないことに注意してください。次の例は、リダイレクトを定義する方法を示しています。

  • Java

  • Kotlin

@PostMapping("/files/{path}")
public String upload(...) {
	// ...
	return "redirect:files/{path}";
}
@PostMapping("/files/{path}")
fun upload(...): String {
	// ...
	return "redirect:files/{path}"
}

データをリダイレクトターゲットに渡す別の方法は、フラッシュ属性を使用することです。他のリダイレクト属性とは異なり、フラッシュ属性は HTTP セッションに保存されます(したがって、URL には表示されません)。詳細については、フラッシュ属性を参照してください。