Controller方法返回值
阿新 • • 發佈:2018-12-23
文章目錄
1 返回ModelAndView
@RequestMapping("modelAndView")
public ModelAndView modelAndView(){
ModelAndView m = new ModelAndView ();
// 設定邏輯檢視的名稱
m.setViewName("hello");
// 設定域屬性
m.addObject("mav","modelAndView");
return m;
}
<p><a href="/modelAndView">返回modelAndView測試</a>
返回的屬性值:${mav}
</p>
2 返回void
@RequestMapping("voidTest")
public void voidTest(HttpServletRequest request, HttpServletResponse response){
Map map= request.getParameterMap();
// 輸出獲取的請求引數值
map.forEach((x,y)->System.out.println(x+"->>"+(String[])y));
// 設定響應返回的資料格式
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
try {
// 向頁面寫資料
response. getWriter().write("test response write something ");
} catch (IOException e) {
e.printStackTrace();
}
}
<p><a href="${pageContext.request.contextPath}/voidTest?test=void">返回void測試</a></p>
2.1 設定轉發
轉發後瀏覽器URL不傳送改變,Request域可以共享,可以通過resquest物件傳遞資料
@RequestMapping("voidTest2")
public void voidTest2(HttpServletRequest request,HttpServletResponse response){
Map map= request.getParameterMap();
map.forEach((x,y)->System.out.println(x+"->>"+(String[])y));
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
try {
response.getWriter().write("test response write something ");
} catch (IOException e) {
logger.error("response write異常",e);
}
// 通過轉發傳遞引數
request.setAttribute("voidTest2","void forward Test");
try {
// 設定資源路徑
request.getRequestDispatcher("WEB-INF/jsp/hello.jsp").forward(request, response);
} catch (ServletException e) {
logger.error("voidTest 轉發 異常",e);
} catch (IOException e) {
logger.error("voidTest 轉發 IO異常",e);
}
}
<p><a href="${pageContext.request.contextPath}/voidTest2?test=void2">返回void測試2</a>轉發傳遞的資料:${voidTest2}</p>
2.3 重定向
response重定向,重定向後url會改變,request作用域中的資料也不再共享。
@RequestMapping("voidTest3")
public void voidTest3(HttpServletRequest request,HttpServletResponse response){
Map map= request.getParameterMap();
map.forEach((x,y)->System.out.println(x+"->>"+(String[])y));
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
try {
response.getWriter().write("test response write something ");
} catch (IOException e) {
logger.error("response write異常",e);
}
request.setAttribute("voidTest2","void forward Test");
try {
// 重定向到modelAndView controller中
response.sendRedirect("modelAndView");
} catch (IOException e) {
logger.error("voidTest3 response 轉發異常",e);
}
}
<p><a href="${pageContext.request.contextPath}/voidTest3?test=void3">返回void測試3:重定向</a></p>
3 返回String
3.1 返回檢視名
https://blog.csdn.net/ccoran/article/details/85111887 前面的spring引數繫結中基本都是用的這種方式
3.2 forword
return "forward:testForward";
3.2 redict
return "redirect:testRedirect";
4 @ResponseBody
ResponseBody註解可以通過內建的9種HttpMessageConverter,匹配不同的Controller返回值型別,然後進行不同的訊息轉換處理。將轉換之後的資料放到HttpServletResponse物件的響應體返回到頁面,不同的HttpMessageConverter處理的資料,指定的ContentType值也不同。
在Springmvc引數繫結中的第四節json資料交換曾使用過