前提:昨天夫君十萬火急的呼喚我,說他程序報錯了。錯誤很簡單,String類型 轉換Date類型失敗。關鍵的是,他看不到前台頁面,也沒辦法打斷點看數據情況。於是,我決定拯救萬民於水火之中,總結一下 關於前后台數據傳輸時候String和Date的類型轉換問題。
簡單寫了一個小程序,使用的框架是SSM。
前端jsp 如下圖:
bean層 如下圖所示:
控制層 如下圖所示:
這樣 運行整個項目,報錯。因為String類型轉換Date類型失敗。
-----------------------------------------------------------------------------我是分隔符--------------------------------------------------------------------------------
目前有幾種辦法解決,我們一個一個說:
第一種:(從前台入手)
前台給后台傳日期類型的值,這個值的格式 大體有兩種。一種是2018-02-01,另一種是2018/02/01。
當傳入的日期類型格式為2018-02-01時:
運行結果為:(報錯)
注: 造成錯誤400的原因--前端提交數據的字段名稱或者是字段類型和后台的實體類不一致,導致無法封裝。
當傳入的格式為2018/02/01時:
運行結果為:(不報錯)
注:顯示出現中文亂碼,因為沒有在配置文件中,做處理。下一篇再講解關於中文亂碼的問題。
關於第一種辦法的小結:
1.當前端的日期按照2018/02/01的格式傳輸給后台時,程序可以將該字符串類型的日期自動轉換成日期格式,存儲到實體類中。
2.當前端的日期按照2018-02-01的格式傳輸給后台時,程序無法轉換,拋異常。一般情況下,使用日期控件傳回來的日期格式為2018-02-01.
-----------------------------------------------------------------------------我是分隔符--------------------------------------------------------------------------------
第二種:(從控制層入手)
個人比較推薦這種做法,在控制層 加入如下一個方法:
代碼如下:
@InitBinder
public void initBinder(ServletRequestDataBinder bin) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
CustomDateEditor cust = new CustomDateEditor(sdf, true);
bin.registerCustomEditor(Date.class, cust);
}
運行展示:
注:這種辦法 不僅使用於對象中的Date類型變量,同樣使用於Date類型的對象。
將controller做下更改:
運行:
結果:
-----------------------------------------------------------------------------我是分隔符--------------------------------------------------------------------------------
其實,也可以用String類型的變量去接受這樣一個數據,然后再將這個String類型轉換成Date類型(通過SimpleDateFormat)。這個方法,就不舉例了。
希望越來越好。2月加油。~~~~