问题
spring mvc表单提交集合对象参数传递报错
页面代码
controller 代码
SwingFormList源码
Swing源码
没拷贝 get/set方法了
页面错误信息
There was an unexpected error (type=Bad Request, status=400).
Validation failed for object='swingFormList'. Error count: 1
补充出错原因
child name 为child_id:<input type="text" name="list[0].child"/>
, 而 Swing.class == org.eddy.swing.entity.Swing#child.getClass()
spring会尝试获取参数为一个字符串类型的构造函数并newInstance
代码修改
将child_id:<input type="text" name="list[0].child"/>
改为child_id:<input type="text" name="list[0].child.id"/>
spring代码见下方
org.springframework.beans.TypeConverterDelegate#convertIfNecessary(java.lang.String, java.lang.Object, java.lang.Object, java.lang.Class
由于我没有定义一个参数为一个String对象的构造函数,导致在赋值的时候产生了异常。
补充
spring 能够调用目标类型的工厂方法来构造对象。
见:org.springframework.core.convert.support.ObjectToObjectConverter#determineFactoryMethod
触发方法:
org.springframework.beans.TypeConverterDelegate#convertIfNecessary(java.lang.String, java.lang.Object, java.lang.Object, java.lang.Class
具体位置 return (T) conversionService.convert(newValue, sourceTypeDesc, typeDescriptor);