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) ;
}