因为项目需要在一个表单里面提交多个对象,比较好的做法就是直接在控制器方法参数里传一个数组。
由于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 这样的方式来提交表单。
还有一点就是基本类型的数组不需要这样做,因为不需要构造函数。