重定向屬性
預設情況下,所有模型屬性都視為在重定向 URL 中公開為 URI 範本變數。在剩餘的屬性中,基本類型或基本類型集合或陣列的屬性會自動附加為查詢參數。
如果模型實例是專門為重定向準備的,則將基本類型屬性附加為查詢參數可能是所需的結果。但是,在註解控制器中,模型可以包含為渲染目的而新增的其他屬性(例如,下拉式欄位值)。為了避免此類屬性出現在 URL 中的可能性,@RequestMapping
方法可以宣告 RedirectAttributes
類型的引數,並使用它來指定要提供給 RedirectView
的確切屬性。如果方法確實重定向,則使用 RedirectAttributes
的內容。否則,使用模型的內容。
RequestMappingHandlerAdapter
提供了一個名為 ignoreDefaultModelOnRedirect
的標誌,您可以使用它來指示如果控制器方法重定向,則永遠不應使用預設 Model
的內容。相反,控制器方法應宣告 RedirectAttributes
類型的屬性,或者,如果它不這樣做,則不應將任何屬性傳遞給 RedirectView
。MVC 命名空間和 MVC Java 配置都將此標誌設定為 false
,以保持向後相容性。但是,對於新的應用程式,我們建議將其設定為 true
。
請注意,擴展重定向 URL 時,會自動提供目前請求中的 URI 範本變數,您無需透過 Model
或 RedirectAttributes
明確新增它們。以下範例示範如何定義重定向
-
Java
-
Kotlin
@PostMapping("/files/{path}")
public String upload(...) {
// ...
return "redirect:files/{path}";
}
@PostMapping("/files/{path}")
fun upload(...): String {
// ...
return "redirect:files/{path}"
}
將資料傳遞到重定向目標的另一種方法是使用 Flash 屬性。與其他重定向屬性不同,Flash 屬性儲存在 HTTP 會話中(因此,不會出現在 URL 中)。請參閱 Flash 屬性 以取得更多資訊。