博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
4种方法让SpringMVC接收多个对象 <转>
阅读量:7071 次
发布时间:2019-06-28

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

问题背景: 

我要在一个表单里同时一次性提交多名乘客的个人信息到SpringMVC,前端HTML和SpringMVC Controller里该如何处理?

  • 第1种方法:表单提交,以字段数组接收;
  • 第2种方法:表单提交,以BeanListModel接收;
  • 第3种方法:将Json对象序列化成Json字符串提交,以List接收;
  • 第4种方法:将表单对象序列化成Json字符串提交,以List接收; 
    第4种方法其实是第3种方法的升级,就是将表单转成Json对象,再转成Json字符串提交; 
    然而,第4种方法还不支持含有多选控件表单的提交,故应该还有第5种加强版的方法。

以上4种方法都共用同一个User实体类,代码如下:

public class User {    private Integer id;    private String name;    private String pwd;    @Override    public String toString() {        return "User{" +                "id=" + id +                ", name='" + name + '\'' +                ", pwd='" + pwd + '\'' +                '}';    }    // .......后面还有getter、setter方法,省略了 }

 

 

第1种方法:表单提交,以字段数组接收 

HTML代码如下:

ID:
Username:
Password:
ID:
Username:
Password:

 

Java代码如下:

@RequestMapping(value = "/submitUserList_1", method ={RequestMethod.POST})    @ResponseBody    public String submitUserList_1(HttpServletResponse response,Integer[] id, String[] name, String[] pwd)                            throws Exception{        String result = "";        if(id == null || id.length <= 0){ return "No any ID.中文"; }        List
userList = new ArrayList
(); for (int i = 0; i < id.length; i++ ) { User user = new User(); user.setId(id[i]); user.setName(name[i]); user.setPwd(pwd[i]); userList.add(user); } result = this.showUserList(userList); return result; }

 


第2种方法:表单提交,以BeanListModel接收 

HTML代码如下:

ID:
Username:
Password:
ID:
Username:
Password:

 

 

Java代码: 

除了刚才公用的User类,还要封装一个User的容器类UserModel:

public class UserModel {    private List
users; public List
getUsers() { return users; } public void setUsers(List
users) { this.users = users; } public UserModel(List
users) { super(); this.users = users; } public UserModel() { super(); }}

 

 

SpringMVC Controller方法:

@RequestMapping(value = "/submitUserList_2", method ={RequestMethod.POST})    @ResponseBody    public String submitUserList_2(UserModel users)            throws Exception{        String result = "";        List
userList = users.getUsers(); if(userList == null || userList.size() <= 0){ return "No any ID.中文"; } result = this.showUserList(userList); return result; }

 

 

第3种方法:将Json对象序列化成Json字符串提交,以List接收 

HTML代码:

    submitUserList_3    

submitUserList_3

 

 

Java代码:

@RequestMapping(value = "/submitUserList_3", method ={RequestMethod.POST})    @ResponseBody    public String submitUserList_3(@RequestBody List
users) throws Exception{ String result = ""; if(users == null || users.size() <= 0){ return "No any ID.中文"; } result = this.showUserList(users); return result; }

 


第4种方法:将表单对象序列化成Json字符串提交,以List接收 

HTML代码:

    submitUserList_4    

submitUserList_4

ID:
Username:
Password:
ID:
Username:
Password:

 

 

Java代码:

@RequestMapping(value = "/submitUserList_4", method ={RequestMethod.POST})    @ResponseBody    public String submitUserList_4(@RequestBody List
users) throws Exception{ String result = ""; if(users == null || users.size() <= 0){ return "No any ID.中文"; } result = this.showUserList(users); return result; }

 

总结: 

第1、2种方法其实都有一个共同的BUG:假如提交三条记录时,前面两条记录的某些字段不填值的话,在SpringMVC里接收不准确了。而且,每2种方法在HMTL中需要给name属性添加[下标],如果下标有跨度的话(比如第一组控件下标是0,第二组下标是2),那么SpringMVC里其实的是0到2三个对象的,默认下标是1的那个对象全为null值。 
第3、4种方法最实用。

以上方法参考自以下URL: 

 
 
 

转载地址:http://yhzml.baihongyu.com/

你可能感兴趣的文章
bzoj 1860: [Zjoi2006]Mahjong麻将 题解
查看>>
第21章 RTX 低功耗之睡眠模式
查看>>
拉格朗日插值
查看>>
递归函数的写法笔记
查看>>
net 自定义泛型那点事
查看>>
免费「模拟面试」福利反馈连载(20180128期)
查看>>
交叉熵代价函数——当我们用sigmoid函数作为神经元的激活函数时,最好使用交叉熵代价函数来替代方差代价函数,以避免训练过程太慢...
查看>>
nxn随机矩阵乘以概率向量依旧是概率向量
查看>>
【转载】TCP协议要点和难点全解
查看>>
mysql修改表、字段、库的字符集
查看>>
realm vs. domain
查看>>
关闭Spring Boot的Jsckson的FAIL_ON_EMPTY_BEANS
查看>>
Oracle 切割字符查询
查看>>
结构体内存对齐具体解释
查看>>
Cocos Code IDE里xcodeprojectlua脚本更新
查看>>
Windows Developer Day - Adaptive Cards
查看>>
WPF自学入门(九)WPF自定义窗口基类
查看>>
ThreadLocal,LinkedBlockingQueue,线程池 获取数据库连接2改进
查看>>
mongodb的数据库操作
查看>>
继续吐槽在net下没有合适的Disk Cache之使用EhCache
查看>>