用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. 解決
所以解決方式就很簡單了。可以通過自定義一個前綴"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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!