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