使用Paramerters重定向到控制器操作时无法访问redirectAttributes

时间:2015-12-19 15:49:21

标签: spring spring-mvc redirect

在Spring MVC中,

当返回值包含redirect:前缀时,viewResolver会将此识别为需要重定向的特殊指示。视图名称的其余部分将被视为redirect URL。客户端将向此重定向URL发送新请求。

我们可以编写这样的处理程序方法来处理重定向:

@RequestMapping(value="/foo", method = RequestMethod.POST )
public String foo(HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes)  {
    redirectAttributes.addFlashAttribute("message", "I am message");
    return "redirect:/bar";
}

现在我们可以像{/ p>一样在bar()中访问此redirectAttribute

@RequestMapping(value="/bar", method = RequestMethod.GET )
public String bar(HttpServletRequest request, HttpServletResponse response, Model model)  {
    String error = (String) model.asMap().get("message");
}

通常我们可以在bar()方法中访问redirectAttribute,但是当我在返回语句中将URL指定为参数化url时,如下所示

return "redirect:/bar?x=1&y=2";

我无法访问redirectAttributes

我进一步检查了chrome中的网络,我发现在重定向后,在返回语句jsessionid中使用未参数化的url时保持相同,但在使用参数化URL时它确实发生了变化。

任何人都可以告诉我为什么会发生这种情况或者我在哪里出错?

1 个答案:

答案 0 :(得分:1)

如果您想在重定向控制器中访问参数xy的值,则需要从Parameter获取request

@RequestMapping(value="/bar", method = RequestMethod.GET )
  public String bar(HttpServletRequest request, HttpServletResponse response, Model model)  {
      System.out.println(request.getParameter("y"));
      return null;
  }