springMvc - 04 前後端數據傳遞

    @RequestMapping(value = "returnType3")
    public void returnType3(HttpServletRequest request, @NotNull HttpServletResponse response) throws  Exception{
        System.out.println("執行TestController");
        List<ex_Order> orderList = new ArrayList<ex_Order>();
        ex_Order item = new ex_Order();
        item.setOrderId("T006");
        item.setOrderDate(null);
        orderList.add(item);

        response.setContentType("text/html;charset=utf-8");
        ObjectMapper jsonTool = new ObjectMapper();
        response.getWriter().write(jsonTool.writeValueAsString(orderList));
    }

1、Model和ModelAndView的區別

Model只是用來傳輸數據的,並不會進行業務的尋址。

ModelAndView則可以進行業務尋址,即可以設置對應的要請求的靜態文件(jsp等)。

Model是每次請求可以自動創建的,放到方法參數上即可,而ModelAndView是需要自行new的。

2、接受數據方式

2.1、方法常見參數類型

1)處理器方法內如果要使用response和Request對象,則需要在方法上增加該兩個參數。

HttpServletRequest requ,HttpServletResponse resp,

2)處理器如果要通過Model方式返回數據,則需要在參數上提供Model model,也可以用Map<string,Object> map對象替代。

Model model

通過如下方法添加數據:

model.addAttribute("orderList",orderList);

2)處理器如果要通過Map方式返回數據,則需要在參數上提供Map<string,Object> map,等價與Model

Map<String,Object> map

通過如下方法添加數據

map.put("orderList",orderList);

3)參數綁定所需要的相關參數和參數註解。

2.2、通過Request獲取參數

最原始的方式,所有客戶端提交的數據都可以通過該對象獲取。

        //獲取某個參數的值
        String id = request.getParameter("id");
        System.out.println(id);
        {
            //獲取數組參數的值
            String[] list = request.getParameterValues("id");
            for (String item:list)
            {
                System.out.println(item);
            }
        }
        {
            //獲取所有請求的參數名信息
            Enumeration<String> list = (Enumeration<String>) request.getParameterNames();
            while (list.hasMoreElements()) {
                String item = list.nextElement();
                System.out.println(item);
            }
        }

2.3、簡單類型綁定

只要請求的參數name值和處理器方法的參數名保持一致,則會自動把前端的參數值傳遞給處理器的參數。

 

2.4、Bean類型綁定

參數定義

數據請求

 

 

調試輸出

 

 

2.5、集合類型綁定 - 簡單變量方式1

 

2.6、集合類型綁定 - 複雜對象方式2

定義模型類:包含複雜類型的集合。

ItemsPo是一個複雜類型,內部包含很多的屬性。

 

前端界面格式:

 

 後臺處理器方法:

 

2.7、集合類型綁定 - Map方式

定義模型類,包含Map對象

 

前端頁面格式:

後臺處理器方法:

 

 集合方法引入自:https://blog.csdn.net/chizhuyuyu/article/details/82414259,未進行驗證測試。

2.8、通過註解接受參數

@PathVariable(value = "name",defaultValue = "張三",required = true) String name

設定接受Get方式中的請求參數(url參數),可以設定默認值,可以設定是否必須,並且可以設定前端參數名和變量名不統一。

@RequestParam(value = "name",defaultValue = "張三",required = true) String name

設定接受Get和Post提交請求方式,可以設定默認值,可以設定是否必須,並且可以設定前端參數名和變量名不統一。

@ModelAttribute(value = "order") ex_Order order

@ModelAttribute註解的方法會在Controller每個方法執行之前都執行,因此對於一個Controller中包含多個URL的時候,要謹慎使用。

3、返回數據方式

3.1、方法返回參數類型

處理方法常用的返回類型有:

1)String,返回的結果只包含邏輯視圖名稱,返回的數據通過Model對象傳遞。

    @RequestMapping(value = "returnType1")
    public String returnType1(Model model)
    {
        System.out.println("執行TestController");
        List<ex_Order> orderList = new ArrayList<ex_Order>();
        ex_Order item = new ex_Order();
        item.setOrderId("T006");
        item.setOrderDate(null);
        orderList.add(item);
        model.addAttribute("orderList",orderList);
        return  "/test/index";
    }

2)ModelAndView,返回的結果包含數據和邏輯視圖名稱。

    @RequestMapping(value ="/returnType2",method = RequestMethod.GET)
    public ModelAndView returnType2() throws Exception {
        System.out.println("執行TestController");
        List<ex_Order> orderList = new ArrayList<ex_Order>();
        ex_Order item = new ex_Order();
        item.setOrderId("T006");
        item.setOrderDate(null);
        orderList.add(item);

        //創建返回的視圖對象
        ModelAndView viewResult = new ModelAndView();
        //添加返回的數據和視圖,視圖映射到/WEB-INF/jsp/test/index.jsp視圖
        viewResult.addObject("orderList",orderList);
        viewResult.setViewName("/test/index");
        return  viewResult;
    }

3)返回Void類型,這個是沒有視圖的返回結果,返回JSON的例子

 具體返回什麼內容,通過response.setContentType來設定。

    @RequestMapping(value = "returnType3")
    public void returnType3(HttpServletRequest request, @NotNull HttpServletResponse response) throws  Exception{
        System.out.println("執行TestController");
        List<ex_Order> orderList = new ArrayList<ex_Order>();
        ex_Order item = new ex_Order();
        item.setOrderId("T006");
        item.setOrderDate(null);
        orderList.add(item);

        response.setContentType("text/html;charset=utf-8");
        ObjectMapper jsonTool = new ObjectMapper();
        response.getWriter().write(jsonTool.writeValueAsString(orderList));
    }

例如文件下載,圖片輸出,JSON結果等相關應用都是用該返回類型。

3.2、返回數據方式

1)通過ModelAndView返回數據

2)通過Model返回數據

3)通過Map<sting,Object>返回數據

4)通過response直接輸出內容

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章