重定向属性
默认情况下,所有模型属性都被视为在重定向 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 属性。