重定向屬性

預設情況下,所有模型屬性都被視為在重定向 URL 中暴露為 URI 模板變數。其餘屬性中,基本型別或基本型別集合或陣列的屬性會自動作為查詢引數附加。

如果模型例項是專門為重定向準備的,將基本型別屬性作為查詢引數附加可能是期望的結果。然而,在帶註解的控制器中,模型可能包含用於渲染目的而新增的附加屬性(例如,下拉欄位值)。為了避免這些屬性出現在 URL 中,@RequestMapping 方法可以宣告一個 RedirectAttributes 型別的引數,並使用它指定要提供給 RedirectView 的確切屬性。如果方法執行重定向,則使用 RedirectAttributes 的內容。否則,使用模型的內容。

RequestMappingHandlerAdapter 提供了一個名為 ignoreDefaultModelOnRedirect 的標誌,您可以使用它來指示如果控制器方法重定向,則永遠不應使用預設 Model 的內容。相反,控制器方法應宣告一個 RedirectAttributes 型別的屬性,或者,如果未宣告,則不應將任何屬性傳遞給 RedirectView。MVC namespace 和 MVC Java 配置都將此標誌設定為 false,以保持向後相容性。但是,對於新應用程式,我們建議將其設定為 true

請注意,來自當前請求的 URI 模板變數在擴充套件重定向 URL 時會自動可用,您無需透過 ModelRedirectAttributes 顯式新增它們。以下示例展示瞭如何定義重定向

  • 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 屬性