原文鏈接:http://www.yiidian.com/springmvc/return-value.html
Spring MVC的控制器方法返回值可以支持多種寫法,每種寫法的場景和效果都不一樣。下面分別來看看每種返回值的使用。
- 普通字符串
- 轉發字符串
- 重定字符串
- void
- ModelAndView
- Java對象
1 普通字符串
返回普通字符串這種情況比較常見,主要用在我們處理完業務邏輯后,需要跳轉到應用的其他頁面。
代碼示例:
/**
* 1)字符串 - 普通字符串(代表頁面名稱,不是完整路徑,最后經過視圖解析器的解析)
* 優勢:寫法簡單
* 劣勢:只能轉發到視圖解析器指定的特定目錄
*/
@RequestMapping("/string")
public String string(){
System.out.println("一點教程網-普通字符串....");
//這里返回頁面名稱,必須經過視圖解析器解析的!!!
return "index";
}
視圖解析器配置:
頁面地址:
2 轉發字符串
普通字符串,只能轉發到視圖解析器指定前綴的目錄下的頁面,如果想轉發到視圖解析器目錄以外的頁面,這時可以使用轉發字符串的寫法。
代碼示例:
/**
* 2)字符串 - 轉發字符串
* 轉發字符串格式:
* forward:完整頁面的路徑 例如:forward:/pages/index.jsp
*
* 優勢:更加靈活,可以轉到本項目下的任何頁面,可以傳遞request域對象數據
* 劣勢:寫法稍復雜
*/
@RequestMapping("/forward")
public String forward(){
System.out.println("一點教程網-轉發字符串....");
return "forward:/index.html";
}
頁面地址:
3 重定向字符串
如果希望使用重定向的方式跳轉頁面,這時可以使用重定向字符串完成。
代碼示例:
/**
* 3)字符串 - 重定向字符串
* 重定向字符串格式:
* redirect:完整頁面的路徑 例如:redirect:/pages/index.jsp
*
* 優勢:很靈活,可以重定向到項目內和項目以外的頁面
* 劣勢:寫法稍復雜,不能轉發requesy域對象數據
*/
@RequestMapping("/redirect")
public String redirect(){
System.out.println("一點教程網-重定向字符串....");
return "redirect:http://www.yiidian.com";
}
4 返回空
一般我們在文件下載的時候,就不需要控制器方法返回任何內容,所以設置為void即可。
代碼示例:
/**
* 4)返回void
* 用於文件下載
*/
@RequestMapping("/void")
public void returnVoid(HttpServletResponse response){
System.out.println("void....");
//模擬文件下載
//1.讀取需要下載的文件
File file = new File("e:/spring.jpg");
//2.構建文件輸入流
try {
InputStream in = new FileInputStream(file);
//3.獲取文件輸出流(從response對象獲取)
OutputStream out = response.getOutputStream();
//4.邊讀邊寫
byte[] buf = new byte[1024];
int len = 0;
while( (len = in.read(buf))!=-1 ){
out.write(buf,0,len);
}
//5.流資源關閉
out.close();
in.close();
} catch (Exception e) {
e.printStackTrace();
}
return;
}
5 ModelAndView
Spring MVC提供了ModelAndView對象,該對象既可以存儲數據到request域,也可以設置視圖。其實Spring MVC任何處理器適配器最終執行完控制器后,都會返回ModelAndView對象。所以這是一個比較底層的對象。
代碼示例:
/**
* 5)ModelAndView: 封裝了Model數據和視圖數據的對象
*/
@RequestMapping("/mv")
public ModelAndView mv(){
ModelAndView mv = new ModelAndView();
//設置模型數據
mv.addObject("model","一點教程網");
//設置視圖數據
mv.setViewName("index");
return mv;
}
6 返回Java對象
這里返回的Java對象,可能是普通JavaBean,也可以是List或Map集合等。一般希望把控制器的返回Java對象轉換為Json字符串,才需要返回Java對象。我們下章節重點來講解:《Spring MVC JSON數據轉換》
源碼下載:https://pan.baidu.com/s/1sINJe9oIuysksT00LK31ng
歡迎關注我的公眾號::一點教程。獲得獨家整理的學習資源和日常干貨推送。
如果您對我的系列教程感興趣,也可以關注我的網站:yiidian.com