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

完成重定向后维护Spring flash属性,spring,spring-mvc,Spring,Spring Mvc,我有一个控制器,可以设置一些flash属性并调用重定向。我还有一个before控制器拦截器,它将拦截重定向的URL并强制另一个重定向。此时,我的Flash属性被删除,因为spring认为重定向目标已经实现 我希望维护这些属性,以便我的第二个控制器可以在第二次重定向后访问它们 有什么可能的方法可以做到这一点吗 请注意,我无法更改最初填充它们的第一个控制器,我需要这些属性才能到达第二个重定向控制器。在HandlerInterceptor中,您应该执行以下操作 FlashMap lastAttribu

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

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

有什么可能的方法可以做到这一点吗


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

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);

我知道已经有一个公认的答案,但我想在@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);
}
Map-previousFlashAttributes=RequestContextUtils.getInputFlashMap(请求);
FlashMap flashAttributesForNextRequest=RequestContextUtils.getOutputFlashMap(请求);
if(previousFlashAttributes!=null&&flashAttributesForNextRequest!=null){
flashAttributesForNextRequest.putAll(以前的FlashAttributes);
getFlashMapManager(请求).saveOutputFlashMap(flashAttributesForNextRequest,request,response);
}

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

将它们添加到新注入的
RedirectAttributes
对象中,或者自己将它们放入
HttpSession
中。让我澄清一下:控制器a填充RedirectAttributes对象并重定向到控制器B。控制器B永远无法到达,因为拦截器将强制重定向到控制器C。在我的拦截器中,我可以访问请求、响应和handler方法。我只能向控制器C或拦截器添加代码。你建议我在哪里取?