springmvc后台如何接收ajax传的json格式的数据,以及json数据采用哪种方式传到后台

我现在遇到一个难题,以前,我用ajax传输数据到后台,后台用springmvc接收,成功了,但是,那个时候,我用的ajax的data部分是{"dcCode":dcCode,"itemNo":itemNo...},这样,我是一个参数,一个参数输入的,虽然慢,但是,还是成功地传输了。现在,我遇到的问题是,很多的参数,需要用遍历的方法来传参,我用jsonstr拼接json字符串的方法,拼出了以下的json格式,{"dcCode":"22","itemNo":"3456",...,"sectionName":"食品课"},....,可能有几百条这样的{}, 然后,我创建了一个数组var values=new Array, 用push把这些jsonstr都放进去,最后,我用ajax的dataType:json,post方法把这些数据传到后台,可是,后台是springmvc,@RequestBody(value="/save",method="post"), 可是,当我用String[] values来接收传过来的json参数的时候,却总是null,不知道到底是怎么回事儿,请教大家,都是用什么样的方法来处理这样传输多条json数据到后台的?如果我的思路是对的,能否把这个代码正确的告诉我?如果有更好的方法,请回答。非常感谢。

为了更好的说明问题,我把代码贴出来,如下

 function submit(){
    debugger;
    var n=$("#countnumber").text();




    var i=0;

    for(var a=0;a<n;a++){
        var saveData=new Array();
        var arr1=$('.item p').find('input:text');
        var arr2=$('.item p').find('input:checkbox');
        for(i=0;i<arr1.length;i++){
            saveData.push((arr1).eq(i).val());
        };



        for(var j=0;j<arr2.length;j++){
            saveData.push((arr2).eq(j).val());
        };



    };

    function User(userId,userName,userPwd,memo,addDate,modifyDate,addUserId){
           this.userId=saveData[1];
           this.userName=saveData[2];
           this.userPwd=saveData[3];
           this.memo=saveData[4];
           this.addDate=saveData[5];
           this.modifyDate=saveData[6];
           this.addUserId=saveData[7];
    };

      var user=new User(); 
      var users=new Array();
     users.push(user);


    $.ajax({
         type: "post",//数据发送的方式(post 或者 get)
         url: "insert.do",//要发送的后台地址
         data: {"user":JSON.stringify(users)},
         dataType: "text",//后台处理后返回的数据格式
         success:function (data){  
             alert(jQuery.parseJSON(data).msg);
         }
    });

}

以上是前台的,接下去是后台的

@ResponseBody
    @RequestMapping(value = "/insert.do", method = RequestMethod.POST)    
    public  Map insertUsers(HttpServletRequest request, @RequestBody String users) throws Exception{
        users=URLDecoder.decode(users, "utf-8");
        ObjectMapper mapper = new ObjectMapper();  //这里用了jackson,自己看看代码,很简洁的
        JavaType javaType=mapper.getTypeFactory().constructParametricType(List.class,User.class);
        List<User> list = mapper.readValue(users, javaType);
        String msg=userService.insertUsers(list);
        Map map = new HashMap();

        map.put("msg", msg);

        return map;



    }   

然后,后台的效果截图如下
图片说明

传到后台的Controller的,数据显示如下
图片说明

然后,进一步调试,出现错误如下

图片说明

请问,这个错误到底是什么原因造成的。是500错误。请高手帮助啊!

你的前台数据的结构是{"dcCode":"22","itemNo":"3456",...,"sectionName":"食品课"},{"dcCode":"22","itemNo":"3456",...,"sectionName":"食品课"},{"dcCode":"22","itemNo":"3456",...,"sectionName":"食品课"}吗?????还有一个问题是,你的方法注解是不是有点问题,貌似是@RequestMapping(value="",method=RequestMethod.POST) 其实这种错误,你可以F12把浏览器的调试模式调出来,然后查看前台传参封装的key-value是什么,然后后台springMVC才知道用什么样的方式去接受。

得到json后建议用jackson解析,现在只说思路

var jsonArr = [{"id":1,"name":"同学1"},{"id":2,"name":"同学2"}];
//下面是请求片段,因为$可能会被吃掉,所以用jQuery
jQuery.ajax({  
type:"POST",  
url:base +"/save",  
data:{"datalist":JSON.stringify(jsonArr)},  
dataType: "json",  
success:function (data){  

}
})

//接收片段
@RequestMapping(value = "/save", method = RequestMethod.POST)    
    public  void myDomain(HttpServletRequest request, @RequestBody String datalist) throws Exception{

        ObjectMapper objectMapper = new ObjectMapper();  //这里用了jackson,自己看看代码,很简洁的
        JavaType javaType = objectMapper.getTypeFactory().constructParametricType(List.class, Domain.class);  
        List<Domain> list = objectMapper.readValue(datalist, javaType);  

        System.out.println("");    
    }  

        //这是实体,属性对应json,用jackson解析方便
        public class Domain {
    private Long id;
        private String name;
        //getter and setter...
   }

你用String values 接收 因为你传的是字符串 他是不会给你转成数组的,还有ajax 要设置 contentType: "application/json; charset=utf-8", 这是请求参数的类型。

jQuery.ajax({  
type:"POST",  
url:base +"/save",  
data:JSON.stringify(jsonArr),  //注意看这是第一个修改的地方
dataType: "json",  
contentType:'application/json',//注意看这是第一个遗漏的地方
success:function (data){  

}
})


@RequestMapping(value = "/save", method = RequestMethod.POST)    
    public  void myDomain(HttpServletRequest request, @RequestBody List<Domain> datalist) throws Exception{
                    //第二处修改的地方在于参数,由于springmvc本身就有支持json格式数据的@RequestBody,可以自动转换成对应的实体
                    //所以上面做的事多此一举
                    System.out.println(datalist.size());   //你可以打印这里,按上面的例子这里是2,不可能是null. 
    }