仍是老規矩,開門見山。 咱們開發的時候常常會從html,jsp中將參數傳到後臺,但是常常會遇到的一種狀況就是傳過來的數據到後臺要組裝成一種對象的格式,最多見的就是enum類型了。這時候spring提供的@initBinder這個annotation 就發揮了很大的做用。html
衆所周知spring能夠自動將request中的數據對應到對象的每一個property,會自動的bind 一些simple data (Strings, int, float, etc.) 對應到 你所要求的Object中,但是若是面對複雜的對象,那就須要藉助於PropertyEditor 來幫助你完成複雜對象的對應關係,這個藉口提供了兩個方法,將一個property 轉成string getAsText(), 另一個方法是將string類型的值轉成property對應的類型。使用起來也很簡單,來個例子:java
@InitBinder public void bindingPreparation(WebDataBinder binder) { DateFormat dateFormat = new SimpleDateFormat("MMM d, YYYY"); CustomDateEditor orderDateEditor = new CustomDateEditor(dateFormat, true); binder.registerCustomEditor(Date.class, orderDateEditor); }
這樣一樣面臨一個問題,若是我有兩個變量,變量名不同,處理的規則也不同,可是他們都是Date.class 類型, 這可怎麼破。好比:spring
貼心的spring,提供了一種重載的方法。 for example:jsp
@InitBinder public void bindingPreparation(WebDataBinder binder) { DateFormat dateFormat1 = new SimpleDateFormat("d-MM-yyyy"); CustomDateEditor orderDateEditor = new CustomDateEditor(dateFormat1, true); DateFormat dateFormat2 = new SimpleDateFormat("MMM d, YYYY"); CustomDateEditor shipDateEditor = new CustomDateEditor(dateFormat2, true); binder.registerCustomEditor(Date.class, "orderDate", orderDateEditor); binder.registerCustomEditor(Date.class, "shipDate", shipDateEditor); }
其實只要爲每一個變量綁定一個不一樣的Editor就能夠了,對於不一樣的變量進行不一樣的處理。這樣就可以方便的完成request 和 property 之間的binder了。spa
以上的兩個例子僅供拋磚引玉的做用,更多的spring內容還請你們本身不斷探索,我的很是喜歡spring,也會不斷髮表新的spring文章。code