重定向屬性
預設情況下,所有模型屬性都被視為在重定向 URL 中暴露為 URI 模板變數。其餘屬性中,基本型別或基本型別集合或陣列的屬性會自動作為查詢引數附加。
如果模型例項是專門為重定向準備的,將基本型別屬性作為查詢引數附加可能是期望的結果。然而,在帶註解的控制器中,模型可能包含用於渲染目的而新增的附加屬性(例如,下拉欄位值)。為了避免這些屬性出現在 URL 中,@RequestMapping
方法可以宣告一個 RedirectAttributes
型別的引數,並使用它指定要提供給 RedirectView
的確切屬性。如果方法執行重定向,則使用 RedirectAttributes
的內容。否則,使用模型的內容。
RequestMappingHandlerAdapter
提供了一個名為 ignoreDefaultModelOnRedirect
的標誌,您可以使用它來指示如果控制器方法重定向,則永遠不應使用預設 Model
的內容。相反,控制器方法應宣告一個 RedirectAttributes
型別的屬性,或者,如果未宣告,則不應將任何屬性傳遞給 RedirectView
。MVC namespace 和 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}"
}
另一種將資料傳遞給重定向目標的方法是使用 flash 屬性。與其他重定向屬性不同,flash 屬性儲存在 HTTP 會話中(因此不會出現在 URL 中)。有關更多資訊,請參閱 Flash 屬性。