用Spring MVC優雅的實現301跳轉
阿新 • • 發佈:2019-02-09
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";
}
至此,完工!