1. 程式人生 > >Controller方法返回值

Controller方法返回值

文章目錄

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資料交換曾使用過