Spring MVC Controller与jquery ajax请求处理json
在用 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的更多相关文章
- Spring Mvc模式下Jquery Ajax 与后台交互操作
1.基本代码 1)后台控制器基本代码 @Controller @RequestMapping("/user") public class UserController { @Aut ...
- spring mvc跨域(ajax post json)--filter方案
@RequestMapping(value = "/login.do",method = RequestMethod.POST) public Message login(Http ...
- spring mvc Controller与jquery Form表单提交代码demo
1.JSP表单 <% String basePath = request.getScheme() + "://" + request.getServerName() +&qu ...
- 【Spring学习笔记-MVC-5】利用spring MVC框架,实现ajax异步请求以及json数据的返回
作者:ssslinppp 时间:2015年5月26日 15:32:51 1. 摘要 本文讲解如何利用spring MVC框架,实现ajax异步请求以及json数据的返回. Spring MV ...
- Posting JSON to Spring MVC Controller
Spring MVC can be setup to automatically bind incoming JSON string into a Java object. Firstly, ensu ...
- 前台JSON字符串,spring mvc controller也接收字符串
前台JSON字符串,spring mvc controller也接收字符串 前台: $.post(url, { data : JSON.stringify(obj) }, function(data) ...
- spring MVC 如何接收前台传入的JSON对象数组并处理
spring MVC 如何接收前台传入的JSON对象数组 主要方法: (主要用到的包是 net.sf.json 即:json-lib-2.3-jdk15.jar 完整相关jar包: commons- ...
- spring MVC 如何接收前台传入的JSON对象数组
spring MVC 如何接收前台传入的JSON对象数组 主要方法: (主要用到的包是 net.sf.json 即:json-lib-2.3-jdk15.jar 完整相关jar包: commons- ...
- 利用 FormData 对象和 Spring MVC 配合可以实现Ajax文件上载功能
Ajax文件上载 利用 FormData 对象和 Spring MVC 配合可以实现Ajax文件上载功能: 步骤 导入组件并准备静态脚本 <dependency> <groupId& ...
随机推荐
- NET Core全新的开发体验
NET Core全新的开发体验 2016年6月27日,这是一个特殊的日子,微软全新的.NET开发平台.NET Core的RTM版本正式发布.我个人将.NET Core的核心特性归结为三点,它们的首字母 ...
- Ubuntu服务器上SSH Server 的安装和设置
网上有很多介绍在Ubuntu下开启SSH服务的文章,但大多数介绍的方法测试后都不太理想,均不能实现远程登录到Ubuntu上,最后分析原因是都没有真正开启ssh-server服务.最终成功的方法如下: ...
- datanode启动后,在web50070port发现不到datanode节点(能力工场)
直接上问题:这两天为了试验,安装了两套集群: (1)32位hadoop1集群(5个节点); (2)64位hadoop2集群(6个节点) 两个集群中都遇到过这种问题:在namenode正常启动hadoo ...
- debian支持ll命令
debian支持ll命令 $ ll -bash: ll: command not found 没有ll这个命令.尽管也知道ll事实上 是ls -l 这个命令的别名,可是总感觉不是非常习惯.由于之前一直 ...
- SVN - 笔记
SVN(版本控制) 1.什么是SVN · 多人共同开发同一个项目,内部最大的问题是,在比较短的时间内如果有多人同时开发同一个文件,会造成彼此的代码相互覆盖的情况发生. · 管理着随时间改变的数据,这些 ...
- 解决win7 中source insight没有courier new字节的问题
解决win7 中source insight没有courier new字节的问题 http://blog.csdn.net/season_hangzhou/article/details/18665 ...
- 2015.7.17( NOI2015 day1 )
今天早起做了NOI2015网络同步赛.... 最近NOI是越来越向NOIP靠拢了....但是我还是不会做..... 第一题:程序自动分析 先离散化一下..然后最多就剩20w个数 , 不等于就存起来.. ...
- 3522: [Poi2014]Hotel( 树形dp )
枚举中点x( 即选出的三个点 a , b , c 满足 dist( x , a ) = dist( x , b ) = dist( x , c ) ) , 然后以 x 为 root 做 dfs , 显 ...
- Codeforces Beta Round #10 B. Cinema Cashier (树状数组)
题目大意: n波人去k*k的电影院看电影. 要尽量往中间坐,往前坐. 直接枚举,贪心,能坐就坐,坐在离中心近期的地方. #include <cstdio> #include <ios ...
- Android事件模型之interceptTouchEvnet ,onTouchEvent关系正解
首先,看Android的官方文档正解 onInterceptTouchEvent()与onTouchEvent()的机制: 1. down事件首先会传递到onInterceptTouchEvent() ...