Spring MVC Controller与jquery ajax请求处理json

在用 spring mvc 写应用的时候发现jquery传递的【json数组对象】参数后台接收不到,多订单的处理,ajax请求:
Java代码   收藏代码
  1. var cmd =  {orders:[{"storeId":"0a1""address":"西斗门路2号""goods":[{"goodsId":"1"}, {"goodsId":"2"}, {"goodsId":"3"}]},{"storeId":"0a1""address":"西斗门路2号""goods":[{"goodsId":"4"}, {"goodsId":"4"}, {"goodsId":"5"}]}]}  
  2.               
  3. $.ajax({  
  4.                 url : url,  
  5.                 type : "POST",  
  6.                 datatype:"json",  
  7.                 data : cmd,  
  8.                 success : function(data, stats) {  
  9.                     if (stats == "success") {  
  10.                       //   window.location.href="/yc"  
  11.                     }  
  12.                 },  
  13.                 error : function(data) {  
  14.                     alert("请求失败");  
  15.                 }  
  16.             });  

开始如何传后台用 @RequestParam 去接收如何都接不到,分析下请求头,原来是json格式没转换
Java代码   收藏代码
  1. Origin:http://localhost  
  2. Referer:http://localhost/test/myorder  
  3. User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1  
  4. X-Requested-With:XMLHttpRequest  
  5. Form Dataview URL encoded  
  6. orders[0][storeId]:0a1  
  7. orders[0][address]:西斗门路2号  
  8. orders[0][goods][0][goodsId]:1  
  9. orders[0][goods][1][goodsId]:2  
  10. orders[0][goods][2][goodsId]:3  
  11. orders[1][storeId]:0a1  
  12. orders[1][address]:西斗门路2号  
  13. orders[1][goods][0][goodsId]:4  
  14. orders[1][goods][1][goodsId]:4  
  15. orders[1][goods][2][goodsId]:5  
  16. Response Headersview source  
  17. Content-Length:1051  
  18. Content-Type:text/html;charset=utf-8  
  19. Date:Mon, 26 Nov 2012 16:10:07 GMT  
  20. Server:Apache-Coyote/1.1  

通过观察,orders[0][storeId]:0a1 
orders[0][address]:西斗门路2号 
orders[0][goods][0][goodsId]:1 变成了多维数组的格式传递,没有按json对象的方式传递(原以为 jquery会自动转的,可惜我想多了,所以出现了乌龙)。 

下了个jquery的json插件,jquery.json-2.4.js 转了下json;但是问题又来了,传的格式正确但是后台还是接不到,打印了下request.getParameterMap(),参数按json格式传进来,但是接的方式又出现了问题,用string接肯定不行,String数组接也接不到,List也接不到,网上查查相关Controller的接收json对象的方式,需要用@RequestBody来进行接收,为了方便干脆把 orders去掉 直接用json数组
Javascript代码   收藏代码
  1. var cmd =  [{"storeId":"0a1""address":"西斗门路2号""goods":[{"goodsId":"1"}, {"goodsId":"2"}, {"goodsId":"3"}]},{"storeId":"0a1""address":"西斗门路2号""goods":[{"goodsId":"4"}, {"goodsId":"4"}, {"goodsId":"5"}]}]  
后台用
Java代码   收藏代码
  1. (@RequestBody List orders)  
这种方法来接 

检查下参数写法,应该没错,测试之后还是有问题 报了这样一个错误: 
POST http://localhost/test/order 415 (Unsupported Media Type)  这个问题应该是前台请求过程中没有指明contentType,ajax中加上contentType: "application/json; charset=utf-8",再测试,果然可以了。完整代码如下:
ajax: 
Javascript代码   收藏代码
  1. var cmd =  [{"storeId":"0a1""address":"西斗门路2号""goods":[{"goodsId":"1"}, {"goodsId":"2"}, {"goodsId":"3"}]},{"storeId":"0a1""address":"西斗门路2号""goods":[{"goodsId":"4"}, {"goodsId":"4"}, {"goodsId":"5"}]}]  
  2.               
  3. $.ajax({  
  4.                 url : url,  
  5.                 type : "POST",  
  6.                 datatype:"json",  
  7.                          contentType: "application/json; charset=utf-8",  
  8.                 data : $toJSON(cmd),  
  9.                 success : function(data, stats) {  
  10.                     if (stats == "success") {  
  11.                       //   window.location.href="/yc"  
  12.                     }  
  13.                 },  
  14.                 error : function(data) {  
  15.                     alert("请求失败");  
  16.                 }  
  17.             });  


Controller method: 
Java代码   收藏代码
  1. @RequestMapping(value = "/order", method = RequestMethod.POST)  
  2.  public  ModelAndView order(@RequestBody String orders) {  
  3.         System.out.println("orders size:" + orders.size());  
  4. }  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值