为了访问重定向方法中的重定向属性,我们使用模型的映射,如下所示:
@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()
的目的是什么?
答案 0 :(得分:1)
RedirectAttributes
用于重定向前的设置闪存属性。重定向后,它们会合并到model
,因此没有理由再次通过RedirectAttributes
再次按照您的建议再次访问它们。
能够像使用地图一样处理属性可能很有用。您可以查看自己设置的内容(containsKey
,isEmpty
,...)。但是,使用通配符通用参数Map<String, ?> getFlashAttributes()
可以防止写入映射,并且奇怪的是为什么他们使用它而不是普通的Object
参数。