1. 程式人生 > >用Spring MVC優雅的實現301跳轉

用Spring MVC優雅的實現301跳轉

1. 問題

Spring MVC裡面實現302跳轉很簡單,只需要如下寫就可以。

  @RequestMapping(value = "/", method = RequestMethod.GET)
    public String redirect(){
        return "redirect:/home";
    }

那麼如何處理301呢?查了很多資料,發現多數講的是自己new 一個 RedirectView ,或者修改HttpResponse的header來實現。不但不好用,跟我們之前的風格也不一樣,怎麼辦?

2. 原理

在Spring裡,所有展示內容都是一個 View ,而 ViewResolver 則是決定使用哪個View進行處理的。處理的依據是viewName,處理的方式是依次呼叫所有的 ViewResolver ,直到返回不為null的結果為止。程式碼在 DispatcherServlet 中。

    protected View resolveViewName(String viewName, Map<String, Object> model, Locale locale,
            HttpServletRequest request) throws Exception {

        for (ViewResolver viewResolver : this.viewResolvers) {
            View view = viewResolver.resolveViewName(viewName, locale);
            if
(view != null) { return view; } } return null; }

3. 解決

  @RequestMapping(value = "/", method = RequestMethod.GET)
    public String redirect(){
        return "redirectPermanent:/home";
    }

至此,完工!