spring mvc 控制器方法傳陣列物件的一些經驗
阿新 • • 發佈:2019-01-31
因為專案需要在一個表單裡面提交多個物件,比較好的做法就是直接在控制器方法引數裡傳一個數組。
由於Spring mvc框架在反射生成控制方法的引數物件的時候會呼叫這個類的getDeclaredConstructor方法來獲得建構函式, 但是一直報NoSuchMethodException的異常。
根據這個方法的jdk文件,這個類是一個數組物件時,這個方法會丟擲java.lang.NoSuchMethodException,因為介面、陣列類、void、基本型別沒有建構函式。
同事後來給我支了兩招,使用ArrayList來代替原生陣列,或者使用DTO來封裝一下原生的陣列,Spring mvc就能夠找到這個引數的構造函數了。
前臺的話可以通過bars[0].name=xxx 這樣的方式來提交表單。@RequestMapping(value={"xxx"}, method = RequestMethod.POST) public String foo(ArrayList<Bar> bars){ param.get(0); } class BarArray{ Bar[] bars; public Bar[] getBars(){ return bars; } public void setBars(Bar[] bars){ this.bars = bars; } } @RequestMapping(value={"xxx"}, method = RequestMethod.POST) public String foo(ArrayList<Bar> bars){ param.get(0); }
還有一點就是基本型別的陣列不需要這樣做,因為不需要建構函式。