|
对于最新稳定版本,请使用 Spring Framework 7.0.6! |
重定向属性
默认情况下,所有模型属性都被视为在重定向 URL 中作为 URI 模板变量暴露。其余的属性中,属于基本类型、基本类型集合或基本类型数组的属性会自动作为查询参数附加到 URL 上。
如果模型实例是专门为重定向准备的,那么将基本类型属性作为查询参数附加可能是期望的结果。然而,在使用注解的控制器中,模型可能包含为渲染目的而添加的额外属性(例如,下拉字段的值)。为了避免这些属性出现在 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 属性。