跳到主要内容
版本:7.0.3

Flash属性

Hunyuan 7b 中英对照 Flash Attributes

Flash属性提供了一种方式,使得一个请求能够存储用于另一个请求的属性。这在重定向时最为常见——例如,“Post-Redirect-Get”模式。在重定向之前,Flash属性会被临时保存(通常是在会话中),以便在重定向后可供后续请求使用,之后这些属性会立即被移除。

Spring MVC支持flash属性有两个主要抽象类。FlashMap用于存储flash属性,而FlashMapManager则用于存储、检索和管理FlashMap实例。

Flash属性支持始终是“开启”的,无需显式启用。然而,如果未使用这些属性,它也不会导致HTTP会话的创建。在每次请求中,都会存在一个“输入”FlashMap,其中包含从前一次请求(如果有)传递过来的属性;以及一个“输出”FlashMap,用于保存供后续请求使用的属性。这两个FlashMap实例都可以通过RequestContextUtils中的静态方法,在Spring MVC的任何地方进行访问。

带注释的控制器通常不需要直接与FlashMap打交道。相反,@RequestMapping方法可以接受一个类型为RedirectAttributes的参数,并利用它来为重定向场景添加闪存属性(flash attributes)。通过RedirectAttributes添加的闪存属性会自动传播到“输出”FlashMap中。同样,在重定向之后,“输入”FlashMap中的属性会自动添加到服务目标URL的控制器所对应的Model中。

将请求与flash属性匹配

flash属性的概念存在于许多其他Web框架中,但有时会遇到并发问题。这是因为,根据定义,flash属性应被保留直到下一次请求。然而,“下一次”请求可能并非预期的接收者,而可能是另一个异步请求(例如轮询或资源请求),在这种情况下,flash属性会被过早地清除。

为了减少这类问题的可能性,RedirectView会自动在FlashMap实例上“标记”目标重定向URL的路径和查询参数。然后,默认的FlashMapManager在查找“输入”FlashMap时,会将这些信息与传入的请求进行匹配。

这并不能完全消除并发问题的可能性,但借助重定向URL中已有的信息,可以大大降低这种可能性。因此,我们建议您主要在重定向场景下使用flash属性。