博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springmvc 不支持 List 对象作为 方法的参数
阅读量:5848 次
发布时间:2019-06-19

本文共 1836 字,大约阅读时间需要 6 分钟。

hot3.png

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/u/2419285/blog/1829363

你可能感兴趣的文章
linux下高可用mysql
查看>>
r710 网卡驱动升级灰常蛋疼,现在在祈祷
查看>>
Microsoft Internet Explorer 数字错误漏洞
查看>>
Linux术语全称
查看>>
Weave and Docker for Mac: The bridge between local and remote services
查看>>
MacOS Sierra安装nodejs
查看>>
Windows7操作系统安装教程(图文)
查看>>
我的友情链接
查看>>
springmvc 不指定访问路径后缀都会匹配的
查看>>
Ubantu权限设置
查看>>
Ubuntu下口袋妖怪终端主题安装
查看>>
我的友情链接
查看>>
jquery判断对象是否存在
查看>>
kubernetes之基本使用2
查看>>
commons-pool实战之 PoolableObjectFactory和ObjectPool
查看>>
高性能WEB开发之flush让页面分块逐步呈现
查看>>
xp重做系统时蓝屏解决方法
查看>>
Maven常用的命令
查看>>
高级排版之HTML,CSS解析
查看>>
最佳的解决方案关于:cactiez监控linux主机时iptables阻碍了udp161端口造成无法监控解...
查看>>