用Spring MVC優雅的實現301跳轉

jack7428 8年前發布 | 16K 次閱讀 Spring MVC Web框架

 

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. 解決

所以解決方式就很簡單了。可以通過自定義一個前綴"redirectPermanent",以及一個對應的 RedirectViewResolver 來處理301問題。 https://gist.github.com/code4craft/144cdc94464a2f5228219b5fe2864232 。前綴及語法可以自由定義。

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

至此,完工!

來自: http://piaoniu.io/yong-spring-mvcyou-ya-de-shi-xian-301tiao-zhuan/

 本文由用戶 jack7428 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!