Spring MVC Controller与jquery ajax请求处理json
2015-12-31 10:56
701 查看
在用 spring mvc 写应用的时候发现jquery传递的【json数组对象】参数后台接收不到,多订单的处理,ajax请求:
开始如何传后台用 @RequestParam 去接收如何都接不到,分析下请求头,原来是json格式没转换
通过观察,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数组
后台用
检查下参数写法,应该没错,测试之后还是有问题 报了这样一个错误:
POST http://localhost/test/order 415 (Unsupported Media Type) 这个问题应该是前台请求过程中没有指明contentType,ajax中加上contentType: "application/json; charset=utf-8",再测试,果然可以了。完整代码如下:
ajax:
Controller method:
以上希望能为遇到类似问题的朋友提供一些帮助。
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"}]}]} $.ajax({ url : url, type : "POST", datatype:"json", data : cmd, success : function(data, stats) { if (stats == "success") { // window.location.href="/yc" } }, error : function(data) { alert("请求失败"); } });
开始如何传后台用 @RequestParam 去接收如何都接不到,分析下请求头,原来是json格式没转换
Origin:http://localhost Referer:http://localhost/test/myorder User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1 X-Requested-With:XMLHttpRequest Form Dataview URL encoded orders[0][storeId]:0a1 orders[0][address]:西斗门路2号 orders[0][goods][0][goodsId]:1 orders[0][goods][1][goodsId]:2 orders[0][goods][2][goodsId]:3 orders[1][storeId]:0a1 orders[1][address]:西斗门路2号 orders[1][goods][0][goodsId]:4 orders[1][goods][1][goodsId]:4 orders[1][goods][2][goodsId]:5 Response Headersview source Content-Length:1051 Content-Type:text/html;charset=utf-8 Date:Mon, 26 Nov 2012 16:10:07 GMT 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数组
var cmd = [{"storeId":"0a1", "address":"西斗门路2号", "goods":[{"goodsId":"1"}, {"goodsId":"2"}, {"goodsId":"3"}]},{"storeId":"0a1", "address":"西斗门路2号", "goods":[{"goodsId":"4"}, {"goodsId":"4"}, {"goodsId":"5"}]}]
后台用
(@RequestBody List orders)
检查下参数写法,应该没错,测试之后还是有问题 报了这样一个错误:
POST http://localhost/test/order 415 (Unsupported Media Type) 这个问题应该是前台请求过程中没有指明contentType,ajax中加上contentType: "application/json; charset=utf-8",再测试,果然可以了。完整代码如下:
ajax:
var cmd = [{"storeId":"0a1", "address":"西斗门路2号", "goods":[{"goodsId":"1"}, {"goodsId":"2"}, {"goodsId":"3"}]},{"storeId":"0a1", "address":"西斗门路2号", "goods":[{"goodsId":"4"}, {"goodsId":"4"}, {"goodsId":"5"}]}] $.ajax({ url : url, type : "POST", datatype:"json", contentType: "application/json; charset=utf-8", data : $toJSON(cmd), success : function(data, stats) { if (stats == "success") { // window.location.href="/yc" } }, error : function(data) { alert("请求失败"); } });
Controller method:
@RequestMapping(value = "/order", method = RequestMethod.POST) public ModelAndView order(@RequestBody List<Map<String,Object>> orders) { System.out.println("orders size:" + orders.size()); }
以上希望能为遇到类似问题的朋友提供一些帮助。
Spring MVC Controller与jquery ajax请求处理json
相关文章推荐
- jquery如何判断滚动条滚到页面底部并执行事件
- jQuery动画效果相关方法实例分析
- 使用jquery+一般处理程序异步载入信息
- jquery正则表达式验证(手机号、身份证号、中文名称)
- JQuery DOM操作
- 使用jquery+css实现更多+收起的功能
- 如何在一个页面上让多个jQuery版本共存
- jQuery语法小结(超实用)
- 一个好用的jquery树形插件zTree
- jQuery实现简单的图片查看器
- php+jQuery+Ajax实现点赞效果的方法(附源码下载)
- jQuery实现简单的图片查看器
- jQuery语法小结(超实用)
- jQuery动画效果相关方法实例分析
- jQuery动画显示和隐藏效果实例演示(附demo源码下载)
- jQuery操作基本控件方法实例分析
- jQuery实现的点赞随机数字显示动画效果(附在线演示与demo源码下载)
- jQuery实现的给图片点赞+1动画效果(附在线演示及demo源码下载)
- jQuery实现的超简单点赞效果实例分析
- jQuery+ajax实现文章点赞功能的方法