JQuery Ajax 请求参数 List 集合处理

引言

JQuery Ajax 发送请求参数一般都是基本类型,比如 String、int;那么,请求参数如果是 List 集合应该如何处理呢?

情况一:Aajx 发送 List 类型请求参数

举例如下:

前端代码
//声明list
var list = [];

//放入string对象
for (var i = 0; i < 3; i++) {
	list[i]="tom";
}

$.ajax({
	url : 'test',
	data : "list":list,
	type : "POST",
	success : function(data) {
		alert(data);
	}
});
后端代码
@RequestMapping("test")
@ResponseBody
public String ajaxList(List<String> list){
	for (String str : list) {
		System.out.println(str);
	}
	return "OK";
}

可以看出,List 类型请求参数与基本类型请求参数没什么区别,无非就是服务器请求参数绑定时类型要写 List

情况二:Ajax 发送 List 类型请求参数

这种情况就要麻烦一些了,SpringMVC 无法直接绑定复杂的请求参数类型,需要用到第三方 json 解析工具,比如 jackson 。

maven 导入 jackson 依赖包

<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-databind</artifactId>
	<version>2.7.3</version>
</dependency>
前端代码
//声明list
var list = [];
//创建两个user对象
var a= {};
a.name="tom";
a.age=23;
a.city="上海";
var b = {};
b.name="jack";
b.age=25;
a.city="安徽";
//将user放入_list
list.push(a);
list.push(b);
 
$.ajax({
	url : 'test',
	data : "list":JSON.stringify(list),
	type : "POST",
	success : function(data) {
		alert(data);
	}
});

JSON.stringify(list) 代码的作用是将 js 对象转换为 json 格式的字符串。这样,无论 js 对象多复杂,最终发送给服务器的请求参数就是一个 json 格式字符串罢了。

后端代码
@RequestMapping("test)
@ResponseBody
public String ajaxList(String list) throws Exception{

	//jackson对象
	ObjectMapper mapper = new ObjectMapper();

	//使用jackson将json转为List<User>
	JavaType jt = mapper.getTypeFactory().constructParametricType(ArrayList.class, User.class);   

	List<User> userList=  (List<User>)mapper.readValue(list, jt);
		
	return "OK";
}

以上代码参数绑定的是 String 类型,因为 ajax 发送的就是 String 类型。接着,就是使用 jackson 工具将 json 字符串转换为 Java 对象即可。

作者:Binge
本文版权归作者和博客园共有,转载必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/binbingg/p/13886389.html