在用 spring mvc 写应用的时候发现jquery传递的【json数组对象】参数后台接收不到,多订单的处理,ajax请求:

var cmd =  {orders:[{"storeId":"0a1", "address":"西斗门路2号", "goods":[{"goodsId":""}, {"goodsId":""}, {"goodsId":""}]},{"storeId":"0a1", "address":"西斗门路2号", "goods":[{"goodsId":""}, {"goodsId":""}, {"goodsId":""}]}]}  

$.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[][storeId]:0a1
orders[][address]:西斗门路2号
orders[][goods][][goodsId]:
orders[][goods][][goodsId]:
orders[][goods][][goodsId]:
orders[][storeId]:0a1
orders[][address]:西斗门路2号
orders[][goods][][goodsId]:
orders[][goods][][goodsId]:
orders[][goods][][goodsId]:
Response Headersview source
Content-Length:
Content-Type:text/html;charset=utf-
Date:Mon, Nov :: 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":""}, {"goodsId":""}, {"goodsId":""}]},{"storeId":"0a1", "address":"西斗门路2号", "goods":[{"goodsId":""}, {"goodsId":""}, {"goodsId":""}]}]  

后台用

(@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":""}, {"goodsId":""}, {"goodsId":""}]},{"storeId":"0a1", "address":"西斗门路2号", "goods":[{"goodsId":""}, {"goodsId":""}, {"goodsId":""}]}]  

$.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

Spring MVC Controller与jquery ajax请求处理json的更多相关文章

  1. Spring Mvc模式下Jquery Ajax 与后台交互操作

    1.基本代码 1)后台控制器基本代码 @Controller @RequestMapping("/user") public class UserController { @Aut ...

  2. spring mvc跨域(ajax post json)--filter方案

    @RequestMapping(value = "/login.do",method = RequestMethod.POST) public Message login(Http ...

  3. spring mvc Controller与jquery Form表单提交代码demo

    1.JSP表单 <% String basePath = request.getScheme() + "://" + request.getServerName() +&qu ...

  4. 【Spring学习笔记-MVC-5】利用spring MVC框架,实现ajax异步请求以及json数据的返回

    作者:ssslinppp      时间:2015年5月26日 15:32:51 1. 摘要 本文讲解如何利用spring MVC框架,实现ajax异步请求以及json数据的返回. Spring MV ...

  5. Posting JSON to Spring MVC Controller

    Spring MVC can be setup to automatically bind incoming JSON string into a Java object. Firstly, ensu ...

  6. 前台JSON字符串,spring mvc controller也接收字符串

    前台JSON字符串,spring mvc controller也接收字符串 前台: $.post(url, { data : JSON.stringify(obj) }, function(data) ...

  7. spring MVC 如何接收前台传入的JSON对象数组并处理

    spring MVC 如何接收前台传入的JSON对象数组 主要方法: (主要用到的包是 net.sf.json  即:json-lib-2.3-jdk15.jar 完整相关jar包: commons- ...

  8. spring MVC 如何接收前台传入的JSON对象数组

    spring MVC 如何接收前台传入的JSON对象数组 主要方法: (主要用到的包是 net.sf.json  即:json-lib-2.3-jdk15.jar 完整相关jar包: commons- ...

  9. 利用 FormData 对象和 Spring MVC 配合可以实现Ajax文件上载功能

    Ajax文件上载 利用 FormData 对象和 Spring MVC 配合可以实现Ajax文件上载功能: 步骤 导入组件并准备静态脚本 <dependency> <groupId& ...

随机推荐

  1. HttpResponseRedirect VS HttpResponse

    当我们处理了post提交的数据之后,我们使用HttpResponseRedirect跳转到另一个页面,而不是用HttpResponse. 例如当一个投票环节时使用HttpResponse可以使用浏览器 ...

  2. Webservice-WSDL详解(三)

    怎样向别人介绍WS的功能呢?一般咱们会写接口文档,亦或口头告诉使用的人.这些方式都存在问题:其中一个我上篇中说过,客户端是无法直接使用服务端接口的:二是程序员在电脑前,想使用WS时,他们的工具(如Ec ...

  3. Struts2 学习笔记16 struts标签 part2

    接下来说一下if标签.下面是结果图. <li><s:if test="#parameters.age[0]<0">error!</s:if> ...

  4. Spark Core源代码分析: Spark任务模型

    概述 一个Spark的Job分为多个stage,最后一个stage会包含一个或多个ResultTask,前面的stages会包含一个或多个ShuffleMapTasks. ResultTask运行并将 ...

  5. android 发送短信 怎样做到一条一条的发送,仅仅有在上一条发送成功之后才发送下一条短信

    android发送短信截获上一条发送是否成功,然后再来发送下一条短信 1.问题:在项目中遇到例如以下要求:待发短信有N条,实现一条一条的发送并在上一条短信发送成功之后再来发送下一条. for(int ...

  6. 为什么我的outlook只能收信不能发信,发送测试电子邮件消息: 无法发送此邮件。请在帐户属性中验证电子邮件

    链接地址:http://zhidao.baidu.com/link?url=aVIFo2aNLuHIZGZuEUataHkZp4XApHqyvbEK8ACHPhi3jwhGhM0GBAtm72AnsP ...

  7. BZOJ 4177: Mike的农场( 最小割 )

    显然是最小割... 对于规律(i, j, k) i,j 互相连边, 容量为k 对于规则(S, a, b) 新建一个点x, x与S中每个点连一条弧, 容量+∞, 然后再根据a决定x与源点或汇点连边. 跑 ...

  8. 在OpenShift平台开发Node.js程序

    设置process.env方便本地调试 --------------------- 修改~/.profile,增加下面两行,然后执行`. ~/.profile`: export OPENSHIFT_N ...

  9. mysql Emoji表情字符集转换

    <pre name="code" class="html">Java代码 java.sql.SQLException: Incorrect stri ...

  10. HDU 4836 The Query on the Tree lca || 欧拉序列 || 动态树

    lca的做法还是非常明显的.简单粗暴, 只是不是正解.假设树是长链就会跪,直接变成O(n).. 最后跑的也挺快,出题人还是挺阳光的.. 动态树的解法也是听别人说能ac的.预计就是放在splay上剖分一 ...