在Spring的RedirectAttributes中使用getFlashAttributes()

时间:2014-01-02 07:33:50

标签: java spring

为了访问重定向方法中的重定向属性,我们使用模型的映射,如下所示:

@Controller
@RequestMapping("/foo")
public class FooController {

  @RequestMapping(value = "/bar", method = RequestMethod.GET)
  public ModelAndView handleGet(Model map) {
     String some = (String) map.asMap().get("some");
  }

  @RequestMapping(value = "/bar", method = RequestMethod.POST)
  public ModelAndView handlePost(RedirectAttributes redirectAttrs) {
    redirectAttrs.addFlashAttributes("some", "thing");
    return new ModelAndView().setViewName("redirect:/foo/bar");
  }

}

但是,为什么我们不能以这种方式访问​​它们:

      @RequestMapping(value = "/bar", method = RequestMethod.GET)
      public ModelAndView handleGet(RedirectAttributes redAttr) {
         String some = redAttr.getFlashAttributes().get("some");
      }

如果添加flashAttributes的唯一目的是它们在重定向方法中可用于模型,那么getFlashAttributes()的目的是什么?

1 个答案:

答案 0 :(得分:1)

RedirectAttributes用于重定向前的设置闪存属性。重定向后,它们会合并到model,因此没有理由再次通过RedirectAttributes再次按照您的建议再次访问它们。


能够像使用地图一样处理属性可能很有用。您可以查看自己设置的内容(containsKeyisEmpty,...)。但是,使用通配符通用参数Map<String, ?> getFlashAttributes()可以防止写入映射,并且奇怪的是为什么他们使用它而不是普通的Object参数。