springMVC框架的引數繫結之資料型別轉換
夥伴們注意了!
小編在這裡給大家送上關注福利:
轉發本文,關注“速學Java”公眾號即可領取小編精心準備的資料一份!
溫馨提示:本文閱讀需要4分鐘,建議收藏後閱讀!
各位小夥伴
今天我們分享的是
springMVC 的資料型別轉換
還記得之前有小夥伴留言
想看這部分的內容
咱們開始吧!
ヾ(◍°∇°◍)ノ
springmvc的引數繫結
先來一起看下 springMVC 的流程圖,在 HandlerAdapter (處理器介面卡)在執行 Handler 之前會進行 springMVC 的引數繫結

引數繫結:
需要經過三個步驟:資料轉化,資料格式化及資料校驗. (請忽略上面的那個框框)
遵循 http 協議的 servletreqeust 傳輸的引數都是 String 型別,但是我們在控制層元件得到的引數都是我們制定或者我們需要的型別,比如 int,double,Object
在這個過程中,springMVC 將 serlvetRequest 物件及目標方法傳給 WebDataBindingfactory 建立一個 DataBinder 物件
如圖:

DataBinder 物件會呼叫 ConversionService 進行資料型別轉換和資料格式化工作, 然後呼叫 validator 元件進行 資料的合法性校驗.
理論大致瞭解了,現在咱們們來動手製作一個數據型別的轉換器.畢竟實踐出真知嘛!
自定義資料型別轉化器
需求:
前臺輸入一個類似於 userName-loginName-sex-age 型別的值,handler 方法用 User 物件接收
前端頁面程式碼:

controller 控制器程式碼:

通過檢視原始碼確認,springMVC 預設沒有提供類似的格式轉換器.我就不給大家演示怎麼檢視原始碼了.
但是 springMVC 支援我們通過自定義轉換器來實現一些特殊的引數轉化,現在我們就來動手寫一下資料型別轉換器.
編寫一個自定義轉換器 實現 convert 介面.

註冊自定義型別轉化器

釋出專案測試一下,這是資料輸入頁面.

前端頁面沒什麼效果,我們看一下控制檯獲取 userName 屬性,證明我們的邏輯跑通了,資料型別轉化完成.
現在利用斷點檢視原始碼:
路徑: DispatcherServlet.doService -> handlerAdapter -> WebBindingInitialize-> conversionservice/validator

紅框框住的就是我們的自定製資料型別轉換器了
自定義資料型別轉化器二
我們再來做一個轉換器.
需求:
使用者資訊需要錄入生日
編寫一個輸入使用者生日的頁面.

controller 控制器程式碼

此時,我們輸入任何一個日期格式的時候 ,handler 方法都無法將 string 型別的引數轉換為 Date 型別,這個時候我們可以自定義一個型別轉換器去轉換,輕車熟路.
編寫一個時間自定義轉換器 實現 convert 介面.

註冊自定義型別轉化器

釋出專案測試一下:

控制檯成功獲取了使用者的生日資訊

注意:
對於這種常見的時間型別轉化, SpringMVC 提供了註解
比如:時間型別,數值型別
現在我們來驗證springMVC自帶的資料型別轉換器.通過註解的方式進行設定.

把之前的配置資訊註釋掉

同樣的釋出專案進行測試,我們的控制檯還是接受到了使用者的生日資訊

怎麼樣?我寫的還算清楚吧!
小夥伴們快來試一下
拜拜了
最後,想學習Java的小夥伴們!
關注 “ 速學java ” 公眾號就可以拿到一份我為大家準備的Java學習資料!
對Java感興趣的小夥伴也可以加 小編V❤: suxuejava
