SpringMVC接收多个对象的4种方法

问题背景:

我要在一个表单里同时一次性提交多名乘客的个人信息到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种方法最实用。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

你可能感兴趣的:(SpringMVC接收多个对象的4种方法)