一文解決Spring MVC的數據綁定

數據綁定介紹

什麼是數據綁定?
在執行程序時,Spring MVC會根據客戶端請求參數的不同,將請求消息中的信息以一定的方式轉換並綁定到控制器類的方法參數中。這種將請求消息數據與後臺方法參數建立連接的過程就是Spring MVC中的數據綁定。
Spring MVC是怎樣完成的數據綁定?
在數據綁定過程中,Spring MVC框架會通過數據綁定組件(DataBinder)將請求參數串的內容進行類型轉換,然後將轉換後的值賦給控制器類中方法的形參,這樣後臺方法就可以正確綁定並獲取客戶端請求攜帶的參數了。
數據綁定的過程:
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
數據綁定的分類
根據客戶端請求參數類型和個數的不同,我們將Spring MVC中的數據綁定主要分爲簡單數據綁定和複雜數據綁定

簡單數據綁定

綁定默認數據類型

當前端請求的參數比較簡單時,可以在後臺方法的形參中直接使用Spring MVC提供的默認參數類型進行數據綁定。
常用默認參數類型:
HttpServletRequest:通過request對象獲取請求信息;
HttpServletResponse:通過response處理響應信息;
HttpSession:通過session對象得到session中存放的對象;
Model/ModelMap:Model是一個接口,ModelMap是一個接口實現,作用是將model數據填充到request域。

綁定簡單數據類型

簡單數據類型的綁定,就是指Java中幾種基本數據類型的綁定,例如int、String、Double等類型。
public String selectUser(Integer id) {}
但當有時候前端請求中參數名和後臺控制器類方法中的形參名不一樣,這就會導致後臺無法正確綁定並接收到前端請求的參數。此時可以考慮使用Spring MVC提供的@RequestParam註解類型來進行間接數據綁定。
@RequestParam註解的屬性聲明如下:
在這裏插入圖片描述
先用@RequestParam接收同名參數,後間接綁定到方法形參上。

綁定POJO類型

針對多類型、多參數的請求,可以使用POJO類型進行數據綁定。
POJO類型的數據綁定就是將所有關聯的請求參數封裝在一個POJO中,然後在方法中直接使用該POJO作爲形參來完成數據綁定。

在使用POJO類型數據綁定時,前端請求的參數名必須與要綁定的POJO類中的屬性名一樣,這樣纔會自動將請求數據綁定到POJO對象中,否則後臺接收的參數值爲null
Spring的編碼過濾器類:org.springframework.web.filter.CharacterEncodingFilter
解決請求參數中的中文亂碼問題:

<filter>
        <filter-name>CharacterEncodingFilter</filter-name>		
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
                   <param-name>encoding</param-name>
                   <param-value>UTF-8</param-value>
        </init-param>
</filter>
<filter-mapping>
       <filter-name>CharacterEncodingFilter</filter-name>
       <url-pattern>/*</url-pattern>//攔截所有URL請求,交由編碼過濾器
</filter-mapping>

綁定包裝POJO

所謂的包裝POJO,就是在一個POJO中包含另一個簡單POJO。例如,在訂單對象中包含用戶對象。這樣在使用時,就可以通過訂單查詢到用戶信息。
使用包裝POJO類型數據綁定時,如果前端條件參數是包裝類中POJO的子屬性,則參數名必須爲對象.屬性;如果查詢條件參數是包裝類的直接基本屬性,則參數名直接用對應的屬性名

自定義數據綁定

一般情況下,使用基本數據類型和POJO類型的參數數據已經能夠滿足需求,然而有些特殊類型的參數是無法在後臺進行直接轉換的,但也有特殊數據類型無法直接進行數據綁定,必須先經過數據轉換,例如日期數據
此時就需要開發者自定義轉換器(Converter)或格式化(Formatter)來進行數據綁定。
Formatter與Converter的作用相同,只是Formatter的源類型必須是一個String類型,而Converter可以是任意類型。

複雜數據綁定

綁定數組

當遇到前端請求需要傳遞到後臺一個或多個相同名稱參數的情況(如批量刪除),將所有同種類型的請求參數封裝到一個數組中,後臺就可以進行綁定接收了。

綁定集合

如果是批量修改用戶操作的話,前端請求傳遞過來的數據可能就會批量包含各種類型的數據,如Integer,String等。此時就可以使用集合數據綁定。即在包裝類中定義一個包含用戶信息類的集合,然後在接收方法中將參數類型定義爲該包裝類的集合。

使用集合數據綁定時,後臺方法中不支持直接使用集合形參進行數據綁定。

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