springmvc 不支持 复杂对象的 list 或者 数据对象作为参数的。 只能是 写一个 VO了
` 这样是不可以的 @RequestMapping("/add") public void add(Model model,List sysRole){
`
但是如果是基本的类型是可以的 ` 说了那么多基础类型和引用类型区别,最主要的一点就是基础类型是没有成员变量的,基础类型可以直接是a=x,而引用类型的值大多需要a.b=x才可以得到,那么获取基础类型的集合参数是最容易的,比如你有个方法是需要获取一个int的数组或者list列表,直接在页面上通过同名的input框就可以办到了
后台获取
@RequestMapping("/add") public void getParmas(String[] titleName)
`
为什么不行?
一些网友的解释是这样的
那把这个参数封装到一个对象中,也只能是同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的 数组 对象是可以的。复杂的 数组对象就不行了。
转载至链接:https://my.oschina.net/u/2419285/blog/1829363