1.问题原因
默认情况下,jQuery传输数据使用Content-Type: x-www-form-urlencodedand和类似于"name=zhangsan&age=18"的序列,
然而AngularJS,传输数据使用Content-Type: application/json和{ "name": "zhangsan", "age": "18" }这样的json序列。
2.解决办法
A. 服务端进行修改,在Controller接收参数的方法中,对象前加 @RequestBody (注:要用对象的方式来接参数)
作用:
i) 该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上;
ii) 再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上。
ok ,但是解决了angular问题之后,发现jquery按照原来的方式提交post请求会报错(错误码415)。
如下方式可以解决jquery提交问题:
json对象转json字符串:JSON.stringify("name": "zhangsan", "age": "18");
B. 客户端修改(推荐)
方案1 更改$http 的提交格式
$http.post(url,{},{params:{"name": "zhangsan", "age": "18"}}).success(function(data){});$http.get(url,{params:{"name": "zhangsan", "age": "18"}}).success(function(data){});
方案2 修改请求头,Content-Type 的值,并将传输的对象进行序列化。
headers:{'Content-Type':'application/x-www-form-urlencoded'}
transformRequest: function(obj) { var str = []; for (var s in obj) { str.push(encodeURIComponent(s) + "=" + encodeURIComponent(obj[s])); } return str.join("&"); }