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

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("&");    
 	         }  
	

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值