您的位置:首页 > 理论基础 > 计算机网络

解决 AngularJs $http 发送post,get请求,SpringMvc无法接受参数的问题。

2017-08-01 15:49 1226 查看
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("&");    
          }  


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐