flash属性不起作用,具体取决于重定向URL

时间:2017-05-24 19:48:29

标签: spring spring-mvc redirect

我使用Spring web MVC 4.3.5测试了以下内容。

以下控制器显示重定向后Flash属性正常工作的示例:

@Controller
@RequestMapping("/redirection")
public class RedirectionController {

    private static final Logger logger = Logger.getLogger(RedirectionController.class);

    @RequestMapping(path="/pageA", method=RequestMethod.GET)
    public String foo(RedirectAttributes redirectAttributes
                      , HttpServletRequest request
                      ) {
        redirectAttributes.addFlashAttribute("foo", "bar");
        return String.format("redirect:%s", "/redirection/pageB.do");
    }

    @RequestMapping(path="/pageB", method=RequestMethod.GET)
    public String boo(final HttpServletRequest request, final Model model) {
        printModelAttributes(model);
        return "page-b";
    }

    private static void printModelAttributes(final Model model) {
        Map<String, Object> map = model.asMap();
        logger.info(String.format("model attributes are: %s", map.keySet()));
    }    
}

当我们使用浏览器访问/pageA路径时,我们会自动重定向到/pageB/pageB的控制器方法会按预期看到Flash属性:

  

14:35:18,740 INFO [webgui.RedirectionController](http- / 127.0.0.1:8082-3)模型属性为:[foo]

但是,如果我更改return语句,则从:

生成重定向字符串
return String.format("redirect:%s", "/redirection/pageB.do");

......来:

return String.format("redirect:%s", "/.."+request.getContextPath()+"/redirection/pageB.do");

...我们仍然被重定向到相同的/pageB路径,但这次缺少flash属性:

  

14:34:51,892 INFO [webgui.RedirectionController](http- / 127.0.0.1:8082-3)模型属性为:[]

我假设这是由于Spring MVC试图变得聪明并试图猜测重定向是否会将我们带到另一个应用程序(不同的上下文路径),在这种情况下它不会将flash属性放在会话中在其他申请中,它们无论如何都不可用。

显然,重定向字符串中存在/..会导致Spring MVC认为我们正在更改应用程序。

我的问题是:

  • 是否记录了此功能?
  • 我的解释是否合理或者这是一个错误?

0 个答案:

没有答案