SpringMVC筆記(3):數據綁定
前言:
今天我們來學習SpringMVC的數據綁定,什麼是數據綁定?在後台業務方法中,直接獲取前端http請求中的參數。
首先來了解一下底層原理,http請求傳輸的參數都是String類型,但是Hanlder業務方法中的參數都是我們指定的數據類型,如int,Object等,所以需要處理參數的類型轉換。此項工作不需要我們開發人員去完成,SpringMVC的HandlerAdapter組件會在執行Handler業務方法之前,完成參數的綁定。
了解完大致理論,熟悉本公眾號風格的朋友們都知道,接下來我們就直接上代碼,實踐出真知。
代碼:
基本數據類型
以int為例,後台需要int類型的參數,直接在業務方法定義處添加int類型的形參即可,http請求參數名必須與形參名一致。
@ResponseBody註解直接返回字元串到前端,不需要返回jsp頁面。
測試,http請求不帶參數,直接報500錯誤。
錯誤原因:
可選的參數「id」不能轉為null,因為我們都知道,基本數據類型不能賦值null。
測試:參數類型為字元串。
400錯誤,錯誤原因:
String類型不能轉換為int類型。
正確使用:
包裝類
測試:不傳參數。
沒有報錯,直接列印null,因為包裝類可以賦值null。
測試:參數類型為字元串。
400錯誤,錯誤原因:
String類型不能轉換為Integer類型。
正確使用:
參數列表添加@RequestParam註解,可以對參數進行相關設置。
@RequestParam
value="id":將http請求中名為id的參數與形參進行映射。
required=false:id參數非必填,可省略。
defaultValue="1":若http請求中沒有id參數,默認值為1。
修改代碼:required=true,刪除defaultValue參數。
再次運行。
報錯,因為id為必填參數,此時前端沒有傳id參數,同時業務方法中id也沒有默認值,所以報錯。
若前端傳id或者id有dafaultValue,程序不會報錯。
數組
POJO
1.創建User類。
2.JSP頁面input標籤的name值與實體類的屬性名對應。
3.業務方法。
4.運行。
處理@ResponseBody中文亂碼:
在springmvc.xml中配置消息轉換器。
POJO級聯關係
1.創建Address類。
2.修改User類,添加address屬性。
3.修改JSP,添加address信息,為input標籤的name設置屬性級聯,即先關聯User的address屬性,再級聯address的id和name。
4.運行。
List
SpringMVC不支持List類型的直接轉換,需要包裝成Object。
List的自定義包裝類:
業務方法:
創建addList.jsp,同時添加三個用戶信息,input的name指向自定義包裝類UserList中的users屬性,級聯到name和age,同時以下標區分集合中不同的對象。
執行代碼。
Set
和List一樣,需要封裝自定義包裝類,將Set集合作為屬性。不同的是,使用Set集合,需要在包裝類構造函數中,為Set添加初始化對象。
業務方法:
JSP,用法與List一樣,input標籤的name指向Set內對象的屬性值,通過下標區分不同的對象。
執行代碼。
Map
自定義包裝類:
業務方法,遍歷Map集合的key值,通過key值獲取value。
JSP,與List和Set不同的是,不能通過下標區分不同的對象,改為通過key值區分。
執行代碼。
JSON
JSP:Ajax請求後台業務方法,並將json格式的參數傳給後台。
注意
1.json數據必須用JSON.stringify()方法轉換成字元串。
2.contentType不能省略。
業務方法:
@RequestBody註解
讀取http請求參數,通過SpringMVC提供的HttpMessageConverter介面將讀取的參數轉為json,xml格式的數據,綁定到業務方法的形參。
@ResponseBody註解
將業務方法返回的對象,通過HttpMessageConverter介面轉為指定格式的數據,json,xml等,響應給客戶端。
我們使用的是阿里的fastjson來取代Spring默認的Jackson進行數據綁定。
fastjson的優勢在於如果屬性為空就不會將其轉化為json,數據會簡潔很多。
如何使用fastjson
1.pom.xml引入fastjson依賴jar包。
2.springmvc.xml中配置fastjson。
運行代碼。
前端傳給後台的數據age=22,後台對age進行修改,並將修改的結果返回給前端,我們在前端頁面看到age=32,修改成功。
源碼:
鏈接:https://pan.baidu.com/s/1nwLjpJb
密碼:i1rw
下一篇:SpringMVC筆記(4):解析模型數據
專業 熱愛 專註
致力於最高效的Java學習
Java大聯盟


TAG:前端開發隨筆 |