在用 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. pay包注释(一)

    lovep2c项目pay模块注释: views.py: def create_user_no(email):    return md5(email).hexdigest().upper() + &q ...

  2. 4.I/O复用以及基于I/O复用的回射客户端/服务器

    I/O复用:当一个或多个I/O条件满足时,我们就被通知到,这种能力被称为I/O复用. 1.I/O复用的相关系统调用 posix的实现提供了select.poll.epoll两类系统调用以及相关的函数来 ...

  3. Week13(12月2日):又到了那个点,期末了~~~~

    Part I:提问 =========================== 1.ASP.NET MVC是微软.NET平台上的一个(      ). A.语言    B.集成开发环境    C.Web开 ...

  4. dotnet tools 运行 dotnet run

    dotnet tools 运行 dotnet run dotnet run 命令介绍 前言 本篇主要介绍 asp.net core 中,使用 dotnet tools 运行 dotnet run 之后 ...

  5. OGG同构(ORACLE-ORACLE)、异构(ORACLE-MYSQL)同步配置及错误解析

    环境:11.2.0.3(已安装数据库实例)+OEL5.7 192.168.1.55 zlm sid:zlm11g 192.168.1.60 zlm2 sid:zlm11g 一.安装软件,配置环境,创建 ...

  6. CString 操作指南

    过阅读本文你可以学习如何有效地使用 CString. CString 是一种很有用的数据类型.它们很大程度上简化了MFC中的许多操作,使得MFC在做字符串操作的时候方便了很多.不管怎样,使用CStri ...

  7. LDAP研究

    一.ldap介绍 ldap是轻量级的文件夹訪问协议.重点是文件夹訪问协议.更为重点的是协议.好吧他是一个协议.也就是一个标准. 那么实现这款协议的软件当中有一款就是openldap. 二.安装wind ...

  8. Android灭亡论之Firefox OS操作系统出现

    今天是2014年7月1日,过几天就要到深圳实训去了,实训核心内容是Android开发.尽管Android现在很火,但作为程序猿的我们必须时刻保持清醒的头脑.我虽不是什么预言家,但近期接触的Androi ...

  9. swift 关于 toolbar 学习笔记

    import UIKit class ViewController: UIViewController { @IBOutlet weak var toolBar: UIToolbar! @IBOutl ...

  10. JSP两个动作(include,forward)

    include动作 <div id="container"> <jsp:include page="HelloWorld.jsp" flush ...