1. 程式人生 > >spring mvc 控制器方法傳陣列物件的一些經驗

spring mvc 控制器方法傳陣列物件的一些經驗

因為專案需要在一個表單裡面提交多個物件,比較好的做法就是直接在控制器方法引數裡傳一個數組。

由於Spring mvc框架在反射生成控制方法的引數物件的時候會呼叫這個類的getDeclaredConstructor方法來獲得建構函式, 但是一直報NoSuchMethodException的異常

根據這個方法的jdk文件,這個類是一個數組物件時,這個方法會丟擲java.lang.NoSuchMethodException,因為介面、陣列類、void、基本型別沒有建構函式。

同事後來給我支了兩招,使用ArrayList來代替原生陣列,或者使用DTO來封裝一下原生的陣列,Spring mvc就能夠找到這個引數的構造函數了。

@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);
}
前臺的話可以通過bars[0].name=xxx 這樣的方式來提交表單。

還有一點就是基本型別的陣列不需要這樣做,因為不需要建構函式。