完成重定向后维护Spring flash属性

时间:2013-08-20 15:11:06

标签: spring spring-mvc

我有一个控制器,可以设置一些flash属性并调用重定向。我还有一个前控制器拦截器,它将拦截重定向的URL并强制另一个重定向。此时,我的Flash属性被删除,因为Spring认为重定向目标已经完成。

我想维护这些属性,以便我的第二个控制器可以在第二次重定向后访问它们。

实现这一目标的任何可行方法?

请注意,我无法更改最初填充它们的第一个控制器,我需要这些属性才能到达第二个重定向控制器。

2 个答案:

答案 0 :(得分:5)

HandlerInterceptor内,您应该执行以下操作

FlashMap lastAttributes = RequestContextUtils.getInputFlashMap(request); // should hold the attributes from your last request       
FlashMap forNextRequest = RequestContextUtils.getOutputFlashMap(request); // will hold the attributes for your next request
forNextRequest.putAll(lastAttributes);

答案 1 :(得分:0)

我知道已有一个已接受的答案,但我想在@Sotirios Delimanolis的答案中添加一些细节。

我的工作是:

Map<String, ?> previousFlashAttributes = RequestContextUtils.getInputFlashMap(request);
FlashMap flashAttributesForNextRequest = RequestContextUtils.getOutputFlashMap(request);
if (previousFlashAttributes != null && flashAttributesForNextRequest != null) {
    flashAttributesForNextRequest.putAll(previousFlashAttributes);
    RequestContextUtils.getFlashMapManager(request).saveOutputFlashMap(flashAttributesForNextRequest, request, response);
}

最后一行将FlashMap保存到输出中。