天天看點

springMVC4(12)複雜對象和集合類型入參綁定1. 複雜對象參數綁定2. 數組參數綁定集合類型參數綁定

對于普通的對象參數綁定,我們隻需要對象成員變量名與請求參數名一一對應即可完成綁定。

而求對于組合對象,我們可以使用級聯的方式來綁定方法參數。見下面執行個體:

我們先定義兩個pojo類:user,article其中atricle是user的成員屬性:

下面是我們的測試前端表單:

下面是我們的控制層方法:

我們在前端表單輸入參數如下所示:

springMVC4(12)複雜對象和集合類型入參綁定1. 複雜對象參數綁定2. 數組參數綁定集合類型參數綁定

點選送出後,頁面輸出:

springMVC4(12)複雜對象和集合類型入參綁定1. 複雜對象參數綁定2. 數組參數綁定集合類型參數綁定

或者我們也可直接通過通路如下連結得到相同結果:

<a href="http://localhost:8080/springmvc/saveuser?username=username&amp;password=password&amp;article.title=title&amp;article.content=content">http://localhost:8080/springmvc/saveuser?username=username&amp;password=password&amp;article.title=title&amp;article.content=content</a>

從上可知,對于user的成員屬性article,如果我們綁定其對應的參數,可以通過級聯article.title,article.content來完成。 在這裡,如果我在控制器的方法入參中,同時定義多個user,或者有多個不同的類執行個體對象。隻要它們的成員屬性名和參數名相同,都會完成綁定

數組參數分為普通類型數組和複雜對象數組兩種,但由于沒有複雜對象數組的構造方法,springmvc隻能綁定普通類型數組。

普通類型數組是指integer、stirng、long等基本資料類型的包裝類,下面通過執行個體來看如何完成綁定工作:

控制器方法:

前端表單定義:

送出如下資料:

springMVC4(12)複雜對象和集合類型入參綁定1. 複雜對象參數綁定2. 數組參數綁定集合類型參數綁定

此時遊覽器輸出:

springMVC4(12)複雜對象和集合類型入參綁定1. 複雜對象參數綁定2. 數組參數綁定集合類型參數綁定

對于list、set、map等的參數綁定,如果我們嘗試直接綁定,是會失敗的,必須将其作為一個具體類對象的成員屬性,這個時候我們也可稱這個具體類對象為一個包裝類。先看下面失敗執行個體:

我們的請求url和輸出結果如下圖所示:

springMVC4(12)複雜對象和集合類型入參綁定1. 複雜對象參數綁定2. 數組參數綁定集合類型參數綁定

它的輸出結果為空json數組,說明我們的綁定失敗了。

這裡遇到的一個主要問題是,如果我們綁定set類型參數時,必須先為set添加預定大小的容器,否則會報錯。而且也不支援基本資料類型包裝類的set綁定,**如果需要完成這一轉換,需要我們自定義轉換器來實作。 下面我們通過一個完整的綜合例子來展示集合類型的參數綁定:

我們的控制層方法極為簡單:

我們輸入如下圖所示的參數:

springMVC4(12)複雜對象和集合類型入參綁定1. 複雜對象參數綁定2. 數組參數綁定集合類型參數綁定

點選送出按鈕,獲得輸出資料:

springMVC4(12)複雜對象和集合類型入參綁定1. 複雜對象參數綁定2. 數組參數綁定集合類型參數綁定

或者我們也可以通過遊覽器位址通路:

<a href="http://localhost:8080/springmvc/getall?username=username1&amp;password=password1&amp;numlist%5b0%5d=11&amp;numlist%5b1%5d=22&amp;articlelist%5b0%5d.title=title1&amp;articlelist%5b0%5d.content=content1&amp;articlelist%5b1%5d.title=title2&amp;articlelist%5b1%5d.content=content2&amp;articleset%5b0%5d.title=title3&amp;articleset%5b0%5d.content=cotent3&amp;articleset%5b1%5d.title=title4&amp;articleset%5b1%5d.content=cotent4&amp;nummap%5b%27num1%27%5d=55&amp;nummap%5b%27num2%27%5d=66&amp;articlemap%5b%27article1%27%5d.title=title5&amp;articlemap%5b%27article1%27%5d.content=content5&amp;articlemap%5b%27article2%27%5d.title=title6&amp;articlemap%5b%27article2%27%5d.content=content6">http://localhost:8080/springmvc/getall?username=username1&amp;password=password1&amp;numlist[0]=11&amp;numlist[1]=22&amp;articlelist[0].title=title1&amp;articlelist[0].content=content1&amp;articlelist[1].title=title2&amp;articlelist[1].content=content2&amp;articleset[0].title=title3&amp;articleset[0].content=cotent3&amp;articleset[1].title=title4&amp;articleset[1].content=cotent4&amp;nummap[%27num1%27]=55&amp;nummap[%27num2%27]=66&amp;articlemap[%27article1%27].title=title5&amp;articlemap[%27article1%27].content=content5&amp;articlemap[%27article2%27].title=title6&amp;articlemap[%27article2%27].content=content6</a>

從上面我們可以看到,使用綁定list和set入參都是以成員屬性名[索引](.級聯成員屬性名)的形式完成綁定,使用map的話則以成員屬性名[鍵名](.級聯成員屬性名)的形式完成綁定