实现重定向的一种方式是创建并返回一个Spring的RedirectView实例。在这种情况下,DispatcherServelt不使用正常的view解析机制。
RedirectView发出HttpServletResponse.sendRedirect()调用返回HTTP重定向到客户端浏览器。默认所有的model属性都被认为以URI模板变量的形式在URL中暴露。其他集合/数组等原始类型将自动追加为查询参数。
将基本类型的属性附加为查询参数,在model实例被明确的为转发准备时是合适的。然而,在注解配置的控制器中,model可能包含用于渲染目的而添加的额外属性。为避免这些属性出现在URL中,注解配置的控制器可以声明一个RedirectAttributes类型的参数来明确指定RedirectView可用的属性。当控制器的方法决定重定向是,RedirectAttruibutes的内容将会被使用。否则model的内容将被使用。
当前请求中的URI模板变量在重定向URL时自动可用,不需要通过Model或RedirectAttributes来明确指定。示例:
@RequestMapping(value="/files/{path}", method=RequestMethod.POST)
public String upload(){
return "redirect:files/{path}";
}
如果使用由控制器自身创建的RedirectView,推荐使用配置注入到控制器中的重定向URL,以免与控制器高度耦合。
重定向前缀
如果返回的视图名包含redirect:前缀,UrlBasedViewResolver及其所有子类都将该视图名处理为重定向URL。
redirect:/myapp/some/resource 将相对于Servlet上下文重定向。redirect:http://myhost.com/some/arbitrary/path将被重定向到绝对的URL。