`
这些年
  • 浏览: 399726 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

spring mvc 接收前台传来的json对象(转)

 
阅读更多
1:自己研究的
    1) 页面ajax代码
     
 
msgObj = {"data":{"2013-11-08":3,"2013-11-07":5,"2013-11-06":3,"2013-11-05":12},"indata":{"2013-11-08":9,"2013-11-07":7,"2013-11-06":23,"2013-11-05":5}};
$.ajax({
                                   

type:'post',
				  url:'${projectPath}/update',
				  data:{"channelType":upchannel_type,"channel":upchannel,"day":upchannel_day,"startTime":upchannel_startTime,"endTime":upchannel_endTime,"database":upchannel_db,"source":backmsgObj,"up":msgObj},//msgobj是json对象
				  dataType:'text',//服务器返回的数据类型 可选XML ,Json jsonp script htmltext等
				  success:function(msg){
						  },
				  error:function(){
				  alert('error');
				  }
		})
    2):javabean
private String channel;
	private String channelType;
	private String day;
	private String startTime;
	private String endTime;
	private String database;
	
	private Map<String,Map<String,String>> source;
	private Map<String,Map<String,String>> up;   //结构与js中的json对象结构一致
 3)controller modle
@RequestMapping("/update")
	public String updateBandwidth(@ModelAttribute SearchBean searchBean, HttpServletRequest request,
			HttpServletResponse response) throws Exception{
		System.out.println("source :"+searchBean.getSource().toString());
		System.out.println("up :"+searchBean.getUp().toString());
		return  null;
	}
 
2:在网上找的,不过试了好久没成功
在用 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 List<Map<String,Object>> orders) {  
  3.         System.out.println("orders size:" + orders.size());  
  4. }  


以上希望能为遇到类似问题的朋友提供一些帮助。
分享到:
评论
1 楼 hopana 2017-04-23  
不用下插件,用JSON.stringify(cmd)就可以了

相关推荐

    Spring MVC不能直接接收list类型参数的问题

    这种方法适用于 JSON 格式的请求体,通过 `@RequestBody` 注解,Spring MVC 可以自动将请求体中的 JSON 数据转换为 Java 对象。 #### 总结 以上介绍了三种解决 Spring MVC 无法直接接收 List 类型参数的方法。这些...

    Angular.js前台传list数组由后台spring MVC接收数组示例代码

    在后端,Spring MVC使用 `@RequestParam` 注解来接收前端传递的JSON字符串。在这个例子中,我们用 `userScoreRecords` 来接收这个参数: ```java @RequestMapping(value = "/reviewProcess/save", method = Request...

    ext前台接收action传过来的json数据示例_.docx

    这篇文档主要阐述了如何在EXT JS前台接收由Action(通常指Java Servlet、Spring MVC或Struts等后端控制器)传递的JSON格式的数据。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,因其易读易写且...

    Spring MVC面试题(2022最新版)

    在Spring MVC中,可以通过返回一个String对象来实现重定向或转发。对于重定向,可以使用"redirect:"前缀;对于转发,则直接返回视图名称即可。 ``` // 重定向 public String handleRequest(HttpServletRequest ...

    如何处理后台向前台传递的json数据

    前台接收到JSON格式的数据后,通常会使用JavaScript中的JSON对象的方法如`JSON.parse()`来解析JSON字符串,转换为JavaScript对象进行进一步的处理。在一些框架中,如Angular、React或Vue等,也会有各自处理JSON数据...

    action接受前台参数—属性接收和实体模型接收

    在这里,`@RequestParam`注解用于从请求参数中获取值,分别对应前端传来的"username"和"password"。 然而,当数据量增大或者结构复杂时,直接使用属性接收会显得繁琐且不易维护。这时,我们可以采用实体模型接收的...

    springMVC接收和返回参数各种情况整合

    本文将详细介绍几种常见的Spring MVC接收前端数据的方法,并提供具体的实现案例。 #### 二、基本概念介绍 Spring MVC 是一种基于Java的轻量级Web框架,它提供了丰富的功能来处理HTTP请求。其中,如何有效地从前端...

    前台js对象在后台转化java对象的问题探讨

    这样,就可以将前台传来的JSON字符串转化为后台的Java对象,进而进行业务逻辑处理。 需要注意的是,在将JavaScript对象转换为JSON字符串时,需要注意JavaScript对象的结构与Java对象的结构是否一致,以确保转换的...

    springMVC前台传数组类型,后台用list类型接收实例代码

    在后台,我们可以使用@RequestParam注解来接收前台传递的数组参数。我们可以使用List类型来接收数组参数。 ```java @RequestMapping(value = "/testList") @ResponseBody public JsonResult testList(@RequestParam...

    Jquery dataTable后台获取数据示例

    使用Spring MVC,可以在Controller层接收前端传来的页码和每页大小,然后在Service层调用Ibatis的`selectPage`方法或者自定义分页SQL查询,返回对应页的数据。 2. **排序**: DataTables 会将排序信息(列号和排序...

    Java中前台往后台传递多个id参数的实例

    在这个实例中,我们使用了 Spring MVC 框架来处理请求。在 Controller 中,我们可以使用 @RequestParam 注解来获取多个 id 参数,然后将其处理并返回结果。 在这个实例中,我们使用了 Ajax 技术来异步传递多个 id ...

    SSM集成应用

    **13.1 前台传method的方法名,后台通过反射调用方法** 通过动态调用方法的方式实现更灵活的处理逻辑。 **13.2 使用过滤器(Filter)实现登陆权限管理** 利用过滤器对用户请求进行拦截,实现权限控制。 **13.3 ...

Global site tag (gtag.js) - Google Analytics