淺談springMVC中controller的幾種返回類型
Controller方法的返回值可以有以下幾種:
1、返回ModelAndView
返回ModelAndView時最常見的一種返回結果。需要在方法結束的時候定義一個ModelAndView對象,並對Model和View分別進行設置。
2、返回String
1):字符串代表邏輯視圖名
真實的訪問路徑=“前綴”+邏輯視圖名+“後綴”
註意:如果返回的String代表邏輯視圖名的話,那麼Model的返回方式如下:
public String testController(Model model){ model.addAttribute(attrName,attrValue);//相當於ModelAndView的addObject方法 return "邏輯視圖名"; }
2):代表redirect重定向
redirect的特點和servlet一樣,使用redirect進行重定向那麼地址欄中的URL會發生變化,同時不會攜帶上一次的request
案例:
public String testController(Model model){ return "redirect:path";//path代表重定向的地址 }
3):代表forward轉發
通過forward進行轉發,地址欄中的URL不會發生改變,同時會將上一次的request攜帶到寫一次請求中去
案例:
public String testController(Model model){ return "forward:path";//path代表轉發的地址 }
3、返回void
返回這種結果的時候可以在Controller方法的形參中定義HTTPServletRequest和HTTPServletResponse對象進行請求的接收和響應
1)使用request轉發頁面
request.getRequestDispatcher("轉發路徑").forward(request,response);
2)使用response進行頁面重定向
response.sendRedirect("重定向路徑");
3)也可以使用response指定響應結果
response.setCharacterEncoding("UTF-8"); response.setContentType("application/json;charset=utf-8"); response.getWriter.write("json串");
以上三種返回值沒有什麼重要和不重要的分別,一般來說都會使用到, 隻不過有的時候使用的方式會有一些細微的差別
補充:SpringMvc中,Controller方法的多種實現方式(指定返回到哪個頁面,指定返回到頁面的數據)
1)ModelAndView
@RequestMapping("/list") public ModelAndView itemsList() throws Exception{ List<Items> list = itmesService.list(); //創建ModelAndView視圖 ModelAndView modelAndView = new ModelAndView(); //將list數據添加到試圖裡 modelAndView.addObject("itemList", list); modelAndView.setViewName("itemList");//設置視圖的名稱,即返回到哪個頁面 //由於有視圖解析器的作用,省去瞭前綴和後綴,其實訪問的頁面為("/WEB-INF/jsp/itemList.jsp") return modelAndView; }
2) String(最常用,最方便,建議)
@RequestMapping("/itemEdit/{id}") public String itemEdit(@PathVariable("id") Integer id, HttpServletRequest reuqest, Model model) throws Exception{ //String idStr = reuqest.getParameter("id"); Items items = itmesService.findItemsById(id); //將items數據加到視圖中 model.addAttribute("item", items); //這裡返回editItem,在@Controller的註解下,回自動添加前綴和後綴,實則是返回到頁面("/WEB-INF/jsp/editItem.jsp") return "editItem"; }
3) 返回void
public void update(Items items,HttpServletRequest request,HttpServletResponse response)throws Exception{ //返回數據,將items的內容放入items裡,jsp頁面調用items就行 request.setAttribute("items", items); //返回指定的頁面 //如果是void類型的話,就不會去調用SpringMvc的架構,因此無法自動加載視圖解析器,所以跳轉的 //網頁名稱應該為其全路徑名稱 request.getRequestDispatcher("/WEB-INF/jsp/success.jsp").forward(request, response); } 就不會去調用SpringMvc的架構,因此無法自動加載視圖解析器,所以跳轉的 //網頁名稱應該為其全路徑名稱 request.getRequestDispatcher("/WEB-INF/jsp/success.jsp").forward(request, response); }
4)關於方法中所需要的參數定義
舉3)中的例子,我在update方法中定義瞭:
Items items,HttpServletRequest request,以及HttpServletResponse response這三個類型.
但是大傢可以發現,其實我在方法中是沒有用到response的,因此,可以把其刪掉,對於程序來說,並不會
產生影響。
因此,大傢在定義方法的時候,可以根據自己的實際需要來定義所需要的類,或者大傢怕以後代碼需要改麻煩的話,
全部定義上也是可以的。
更新
5)若如果想要接口不是跳轉頁面,而是返回數據,則需要添加@ResponseBody的註解
例:
@RequestMapping("atimynyc/getUser") @ResponseBody public User getUser(String id){ User user = new User(); user.setUserName = "Atimynyc"; user.setUserAge = 18; user.setUserPhone = "123456789"; return User; }
通過加上ResponseBody,springmvc就知道該接口是返回數據,例,當我們用ajax調用上面的接口url時atimynyc/getUser,就可以獲得user這個對象。
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。
推薦閱讀:
- SpringMVC響應視圖和結果視圖詳解
- Spring MVC中@Controller和@RequestMapping註解使用
- SpringMVC數據頁響應ModelAndView實現頁面跳轉
- SpringMVC中Controller類數據響應的方法
- 使用springmvc配置視圖解析器和重定向方式