前提:前端为ajax发送请求,后台为spingMVC接收参数
1、参数为对象数组
前端:
$.ajax({
url:'/login/login.do',
type:'post',
contentType:'application/json;charset=UTF-8',
data:JSON.stringify([{
name:'zs',
password:'123456'
},{
name:'ls',
password:'888888'
}]),
dataType:'json',
success:function () {
}
});
后台:
a、使用注解的方式
@RequestMapping("/login.do")
@ResponseBody
public Map<String,Object> login(@RequestBody List<User> users){
System.out.println(users);
return null;
}
要注意的点就是要把json对象转为json字符串,加上contentType为’application/json;charset=UTF-8’,后台的参数上加上@RequestBody注解
b、非注解方式
@RequestMapping("/login.do")
@ResponseBody
public Map<String, Object> login(HttpServletRequest request) {
Map<String, Object> result = new HashMap<String, Object>();
String reqBody = "";
try {
BufferedReader streamReader = new BufferedReader(new InputStreamReader(request.getInputStream(), "UTF-8"));
StringBuilder responseStrBuilder = new StringBuilder();
String inputStr;
while ((inputStr = streamReader.readLine()) != null) {
responseStrBuilder.append(inputStr);
}
reqBody = URLDecoder.decode(responseStrBuilder.toString(), "UTF-8");
} catch (Exception e) {
e.printStackTrace();
}
List<User> users = JSON.parseArray(reqBody, User.class);
return result;
}
2、参数为基本类型数组
a、ajax设置traditional为true,后台用数组接收
前端
$.ajax({
url:"../test/testArrParam.do",
data:{arr:[1,2,3,4]},
traditional:true,
type:"post",
dataType:"json",
success:function (obj) {
alert(obj.arr);
}
});
后端
@RequestMapping("/testArrParam.do")
public Map<String, Object> testArrParam(Integer[] arr) {
Map<String, Object> result = new HashMap<>();
result.put("arr",arr);
return result;
}
b、ajax设置traditional为true,后台用List接口接收并加上@RequestParam注解,注解一定要加不然会报错
前端
$.ajax({
url:"../test/testArrParam.do",
data:{arr:[1,2,3,4]},
traditional:true,
type:"post",
dataType:"json",
success:function (obj) {
alert(obj.arr);
}
});
后端
@RequestMapping("/testArrParam.do")
public Map<String, Object> testArrParam(@RequestParam("arr") List<Integer> arr) {
Map<String, Object> result = new HashMap<>();
result.put("arr",arr);
return result;
}