引言
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 对象即可。