springmvc 不支持 對象的 list 或者 複雜數組對象做爲參數的。 只能是 寫一個 VO了html
` 這樣是不能夠的 @RequestMapping("/add") public void add(Model model,List sysRole){前端
`java
可是若是是基本的類型是能夠的 ` 說了那麼多基礎類型和引用類型區別,最主要的一點就是基礎類型是沒有成員變量的,基礎類型能夠直接是a=x,而引用類型的值大多須要a.b=x才能夠獲得,那麼獲取基礎類型的集合參數是最容易的,好比你有個方法是須要獲取一個int的數組或者list列表,直接在頁面上經過同名的input框就能夠辦到了spring
後臺獲取數組
@RequestMapping("/add")網絡
public void getParmas(String[] titleName)mvc
`app
參考函數
一些網友的解釋是這樣的測試
那把這個參數封裝到一個對象中,也只能是同setter方法,那問題的關鍵是如何找到這個setter 方法?確定是setName中的name和request中的name對應。這才能找到。你想,若是你單純接收一個list參數,list雖然有get和set方法,可是沒有名字呀,只能根據數組下標來判斷參數位置。因此只能經過第二種方法進行參數傳遞
但是我想了想了,感受不對啊。 若是我是springmvc 開發者,我若是隻知道了 List 的加入類型了,爲何 不能經過反射 對應的放入 對象裏面? 不合理啊。
###坑,百度的不可信
我本身測試了一下。發現網絡上面隨便的百度的仍是有點坑的。
@RequestMapping("/add") public void getParmas(List titleName)
我發現這樣的寫法仍是會報錯的。 而 String[] titleName 是能夠的。
正常的理解方式
爲何 string 類型的 List 不能夠,而 String[] 卻能夠的? 並且原本 原本 前端傳過來的參數,類型默認就是 string 類型,
其實就是 list 的問題 若是單純從報錯的角度來看 Could not instantiate bean class [java.util.List]: Specified class is an interface
它確實list 是一個接口而不是list 實現類。所以也是能夠知道緣由了. 我認爲是 , List 的類型 對應 springMVC 來講,是不能準確獲取到的, List 對應 springmvc 處理來講,它是 List 也就是泛型,不知道具體是什麼類型。 由於 springmvc 的調用controller的方法的方式是 經過反射來 調用的。 同理 Long[] 能夠就是 已經知道類型是 Long 了,也就是 能夠的。
也就是 基本類型和 string的 數組 對象是能夠的。複雜的 數組對象就不行了。
總是報錯什麼數組對象沒有構造函數 網上的
java.lang.NoSuchMethodException: [Lcom.dn.vo.User;.<init>().
複雜對象的數組沒有構造函數,並且 基本類型的有 是這個意思吧,哈哈。
最後
多是個人springmvc 版本問題比較低, 不支持 List 若是大家誰的支持告訴我一下
深刻探究
其實你們深刻想一下,爲何 對象裏面的 List<?> 屬性好比 List<user>
能夠 經過 springmvc 進行入 自動參數賦值進去? 並且也是 List ,
而 方法 參數 直接就是 List<?> 這個是 確定不行的。
反推應該 對象 好比Order 對象裏面的 List<user> 屬性應該不行的,
但是什麼?
實際上是由於經過反射, 若是 方法參數的 List<> 集合類型的,
是不能經過反射獲取 具體 該 集合類放入的是 什麼 類型的。
而若是是 對象, 能夠經過 反射 獲取 對象裏面的 list 屬性的,
是能夠 知道該 list 屬性是 放入什麼 數據類型的。
不信你們能夠 本身 動手 試試,反射是能夠 獲取的。
能夠看看我寫的 https://my.oschina.net/u/2419285/blog/1834478 這個文章裏面的思路。