springmvc 不支持 List 对象作为 方法的参数

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的 数组 对象是可以的。复杂的 数组对象就不行了。

老是报错什么数组对象没有构造函数 网上的

java.lang.NoSuchMethodException: [Lcom.dn.vo.User;.<init>(). 复杂对象的数组没有构造函数,而且 基本类型的有 是这个意思吧,哈哈。

最后

可能是我的springmvc 版本问题比较低, 不支持 List 如果你们谁的支持告诉我一下

 

深入探究

其实大家深入想一下,为什么 对象里面的 List<?> 属性比如  List<user>

可以 通过 springmvc 进行入 自动参数赋值进去? 而且也是 List , 

而 方法 参数 直接就是 List<?> 这个是 肯定不行的。

反推应该  对象 比如Order 对象里面的  List<user> 属性应该不行的,

可是什么?

其实是因为通过反射, 如果 方法参数的 List<> 集合类型的,

是不能通过反射获取  具体 该 集合类放入的是 什么 类型的。

而如果是 对象, 可以通过 反射 获取 对象里面的 list 属性的,

是可以 知道该 list 属性是 放入什么 数据类型的。

不信大家可以 自己 动手 试试,反射是可以 获取的。

 

可以看看我写的 https://my.oschina.net/u/2419285/blog/1834478  这个文章里面的思路。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/ouminzy/blog/1829363

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值