RedirectAttributes传递参数到重定向后的页面
Servlet容器在页面跳转时有两种方式,forward和redirect的,其中forward时应用的是在服务端的跳转,应用的是同一个request。而redirect是服务端通过响应301和对应的新地址告诉浏览器让浏览器重新请求新的地址。第一次请求和第二次请求使用的不是同一个request的。所以这种情况下,不能直接通过request传递参数到新的页面。SpringMVC默认使用的是forward请求,如果需要使用redirect跳转新页面,可以使用redirect:
前缀。forward请求时添加到Model中的参数都可以被传递到新的页面,而通过redirect:
跳转到新页面时,默认会自动把当前Model中包含的原始类型的属性及原始类型的Collection/Array作为查询参数传递下去。比如对于下面的处理器映射,如果我们请求/redirect/abc
,则会自动跳转到/abc
,并且会附上查询参数?a=1&b=2&c=1&c=2&c=3
,所以浏览器会自动请求/abc?a=1&b=2&c=1&c=2&c=3
。
@RequestMapping("/redirect/{target}")
public String redirectTo(@PathVariable("target") String redirectTo, Map<String, Object> model) {
model.put("a", "1");
model.put("b", 2);
model.put("c", Arrays.asList(1, 2, 3));
return "redirect:/" + redirectTo