spring mvc 可以自动的帮你封装参数成为对象,不用自己手动的通过request一个一个的获取参数,但是这样自动的参数封装碰碰到了集合参数可能就需要点小技巧才可以了。

一、基础类型和引用类型有什么区别?

  基础类型是直接保存在堆栈上面的,引用类型(对象)值保存在堆上面,地址保存在栈上面的,基础类型都有非null的默认值,比如int默认是0,boolean默认是false,引用类型除非是用new开辟出新的空间,否则只有地址信息没有值信息。int 和 integer的区别不仅是有没有默认值的问题,Integer还有自己的成员变量,虽然都是静态的,比如Integer.MAX_VALUE就是其中一个,而Integer的值都是保存在一个地址不变的成员变量value。

二、基础类型、赋值的时候不需要特别指名成员变量(String,基础类型的封装类)的引用类型集合参数

  说了那么多基础类型和引用类型区别,最主要的一点就是基础类型是没有成员变量的,基础类型可以直接是a=x,而引用类型的值大多需要a.b=x才可以得到,那么获取基础类型的集合参数是最容易的,比如你有个方法是需要获取一个int的数组或者list列表,直接在页面上通过同名的input框就可以办到了

1
2
3
<input type="text" value="" name="titleName" id="add_titleName"/>
<input type="text" value="" name="titleName" id="add_titleName"/>
<input type="text" value="" name="titleName" id="add_titleName"/>

后台获取

1
public void getParmas(List<String> titleName)

或者

1
public void getParmas(String[] titleName)

都可以获取到titleName的值。

这里String不是8大基础类型,但是String和基础类型有个共同的特点,就是赋值的时候不需要特别指名成员变量,包括基础类型的封装类一样。

三、赋值的时候不需要特别指名成员变量引用类型的集合参数

  这些类基本上都是我们自己组建的业务逻辑类,很多情况下还包含了相互组合的关系,先说第一种情况,单纯的接收一个List<?> xxx;

1
2
3
4
@RequestMapping("/add")
    public void add(Model model,List<SysRole> sysRole){
     。。。。
    }

这样的方式是不行的,会报Could not instantiate bean class [java.util.List]: Specified class is an interface这个异常。

Servlet.service() for servlet [springServlet] in context with path [/bid] threw exception [Request processing failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [java.util.List]: Specified class is an interface] with root cause
org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [java.util.List]: Specified class is an interface 

怎么解决了?

需要我们用到第二种情况。

接收一个带有list成员变量的的对象,比如你有个类是User,一个User可以有多个联系电话,

class User{List<Contact> contactList;
}

我们要获取一个带有多个联系人的user参数

public void addUser(User user){
.....
}

在页面上直接可以通过

<input type="text" value="" name="user.contactList[0].phone" id="add_contact_phone_1"/>

这样的方式进行获取参数。

那我们碰到第一种情况怎么办呢?把它变成第二种方式进行处理,也就是说新建一个包装类专门来包装类似的需要接收的list参数。

为什么第一种方式不行了?

因为spring mvc 中获取参数的方式不管有多少种,他的本质依然是

request.getParameter("name")

那把这个参数封装到一个对象中,也只能是同setter方法,那问题的关键是如何找到这个setter
方法?肯定是setName中的name和request中的name对应。这才能找到。你想,如果你单纯接收一个list参数,list虽然有get和set方法,但是没有名字呀,只能根据数组下标来判断参数位置。所以只能通过第二种方法进行参数传递

spring mvc 如何传递集合参数(list,数组)相关推荐

  1. Spring MVC —— 前后台传递JSON

    1. 传递JSON参数 vardata = {'id':1,'name':'abc'}; $.ajax({type:'post',url:'homePageAction.do?testAJax',co ...

  2. spring MVC使用自定义的参数解析器解析参数

    目录 写在前面 编写自定义的参数解析器解析请求参数 项目结构 定义注解 实体类 controller 定义参数解析器 注册参数解析器 启动项目 发起请求查看结果 写在前面 如果还有小伙伴不知道spri ...

  3. Spring MVC PUT 表单参数获取

    默认的Spring MVC不支持put提交表单参数 加入以下配置在web.xml即可解决 <filter><filter-name>HttpMethodFilter</f ...

  4. spring mvc 之可选路径参数

    在spring mvc中,注解@PathVariable可以获得路径参数,但如果我想让路径参数可选呢? @GetMapping({"/get/{offset}/{count}",& ...

  5. java中的@param参数_java – @RequestParam在Spring MVC中处理可选参数

    弹簧控制器可以处理这两种请求吗? 1) http://localhost:8080/submit/id/ID123432?logout=true 2) http://localhost:8080/su ...

  6. Spring MVC如何接收浏览器传递来的请求参数--request--形参--实体类封装

    阅读目录 1. 通过HttpServletRequest获得请求参数和数据 2. 处理方法形参名==请求参数名 3. 如果形参名跟请求参数名不一样怎么办呢?用@RequestParam注解 4. 用实 ...

  7. Spring MVC(三)--控制器接受普通请求参数

    Spring MVC中控制器接受参数的类方式有以下几种: 普通参数:只要保证前端参数名称和传入控制器的参数名称一致即可,适合参数较少的情况: pojo类型:如果前端传的是一个pojo对象,只要保证参数 ...

  8. Spring Mvc Url和参数名称忽略大小写

    在开发过程中Spring Mvc 默认 Url和参数名称都是区分大小写的. URL忽略大小写: @Configuration public class SpringWebConfig extends ...

  9. 【Java学习路线之JavaWeb】Spring MVC框架入门教程

    文章目录 读者 阅读条件 MVC设计模式简介 JSP+JavaBean Servlet+JSP+JavaBean MVC优缺点 优点 缺点 Spring MVC是什么 Spring MVC优点 第一个 ...

最新文章

  1. torchtext语料库 词与 下标互转使用教程
  2. 简单的表单提交 by MVC 2
  3. Hadoop与Alpach Spark的区别
  4. 无障碍开发(六)之ARIA在HTML中的使用规则
  5. linux拒绝sftp连接,linux服务器拒绝sftp
  6. VTK:Filtering之LandmarkTransform
  7. 设置storage模块的数据库操作支持、添加仓储分类列表接口(dao层)
  8. vue的token刷新处理
  9. 嵌入式工程师开发工作主要做些什么,以后收入怎样
  10. Asp学习者完整攻略之三:操作SQL:SQL基础:
  11. 罗永浩:当年签了 “流氓协议” 将公布这个恶劣投资者
  12. dbcc dbreindex server sql_SQL Server数据库碎片整理
  13. 【三维路径规划】基于matlab改进的蝙蝠算法农用无人机三维路径规划【含Matlab源码 1514期】
  14. Ros平台下:从零开始学习SLAM(序)
  15. 如何统计网页的浏览量?Gate
  16. 高德地图导航onInitNaviSuccess只调用一次
  17. 为什么Java程序员工资高?
  18. macbook usb口突然不能用 解决方法
  19. 美团App用户界面分析
  20. lisp+等高线点线矛盾检查_基于AutoCAD平台地形图高程点与等高线点线矛盾检测方法研究与实现...

热门文章

  1. OpenGL背景照明
  2. C++检查图是否为二部图的算法(附完整源码)
  3. 数组中只出现1次的2个数
  4. QT的QSqlDatabase类的使用
  5. QT的QProxyStyle类的使用
  6. 浅谈C++函数的参数
  7. pycharm下配置jupyter_在 Pycharm 中安装及使用 Jupyter (图文详解)
  8. 08_Android中的SimpleAdapter的使用
  9. 1.物理系统PhysicsWorld,RayCast
  10. 运用El表达式截取字符串/获取list的长度