SpringMVC 如何使用集合参数(list,数组)

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

基础类型是没有成员变量的

页面如下:

<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"/>

后台接收代码如下:

public void getParmas(List<String> titleName)
//或者使用下边这个方式
public void getParmas(String[] titleName)

 2.引用类型的集合参数(即List<Bean>)

直接在方法上使用List<Bean>报不能实例化错误(Could not instantiate bean class [java.util.List]: Specified class is an interface)!

org.springframework.beans.BeanInstantiationException: 
Could not instantiate bean class [java.util.List]: Specified class is an interface] with root cause

解决方案:构造一个包装类,类属性写着这个list<Bean>

eg:

class UserVO{
   List<User> userList;   
}

 

@RequestMapping("/add")
 public void add(UserVO uservo){
     。。。。
 }

 前台页面:

<input type="text" value="" name="uservo.userList[0].username" id=""/>
<input type="text" value="" name="uservo.userList[0].username" id=""/>
<input type="text" value="" name="uservo.userList[0].username" id=""/>

本人感觉,参数使用list<Bean>,前面加上@RequestBody接受带List对象的对象或者List对象

@PostMapping("/batchSubmit")
public ResultMapper<XingZhengChuFa> batchSubmit(@RequestBody XingZhengChuFa[] chuFas) throws Exception {}    
//或者使用@RequestBody List<XingZhengChuFa> chuFas  不建议使用List
@PostMapping("/batchSubmit")
public ResultMapper<XingZhengChuFa> batchSubmit(@RequestBody  List<XingZhengChuFa> chuFas) throws Exception {}

这是前端给的参数,就应该是json数组。 

===============================================================================================

以下是介绍使用@RequestBody接受带List对象或者对象数组(User[] user)

第一种方式 传递的参数Bean

jsp文件:
$("#saveuddd").click(function(){
                    var saveDataAry=[];
                    var data1={"name":"test","password":"gz"};
                    var data2={"name":"ququ","password":"gr"};
                    saveDataAry.push(data1);
                    saveDataAry.push(data2);
                    $.ajax({
                        type:"POST",
                        url: basePath + "/user/saveUser",
                        dataType:"json",
                        contentType:"application/json", // 指定这个协议很重要
                        data:JSON.stringify(saveDataAry), //只有这一个参数,json格式,后台解析为实体,后台可以直接用
                        success:function(data){
                        }
                    });
                })

 

java文件
 @RequestMapping(value = "saveUser", method = {RequestMethod.POST })
     @ResponseBody
    public void saveu( @RequestBody List<User> users ){ //此时的user是map数据,并没有解析为bean // 不建议使用
         System.out.println(users) ;
    }
使用如下方法,可以使用bean
 @RequestMapping(value = "saveUser", method = {RequestMethod.POST })
     @ResponseBody
    public void saveu( @RequestBody User[] users ){ 
         System.out.println(users.getName()) ; // 此时的user是实体bean
    }

第二种方式 传递的键值对

jsp同上
另外一种:
 @RequestMapping(value = "saveUser", method = {RequestMethod.POST })
 @ResponseBody
 public void saveu( @RequestBody List<Map<String,String>> users ){ 
// spring MVC只能解析外层的json格式,内部的bean转化为Map格式的键值对,需要对map解析
      List<User> userList = new ArrayList<User>();
      for(Map<String,String> map : users){
          User u = new User();
          u.setName(map.get("name"));
          u.setPassword(map.get("password"));
          userList.add(u);
      }
     // 这里就可以使用 userList 了
 }

第三种方式

能够传递多个参数,但是每一个参数都是字符串(bean类型的数据会转化为JSON格式的字符串)

jsp文件
$("#saveuddd").click(function(){
                    var saveDataAry=[];
                    var data1={"name":"test","password":"gz"};
                    var data2={"name":"ququ","password":"gr"};
                    saveDataAry.push(data1);
                    saveDataAry.push(data2);
                    $.ajax({
                        type:"POST",
                        url: basePath + "/user/saveUser",
                        dataType:"json",
                        data:{users:JSON.stringify(saveDataAry),aa:"ddd"},
                          // 可以传递多个参数,但此时的users内容与另外一个参数:aa 的内容一起传递,所以后台解析为字符串
                         // 后台接收的users内容:[{"name":"test","password":"gz"},{"name":"ququ","password":"gr"}]
                         // 后台接收的 aa 内容:"ddd"
                        success:function(data){

                        }
                    });
                })
java文件
@RequestMapping(value = "saveUser", method = {RequestMethod.POST })
     @ResponseBody
    public void saveu( String users , String aa ){
         System.out.println(users) ;
    }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值