zoukankan      html  css  js  c++  java
  • springMVC通过ajax传递参数list对象或传递数组对象到后台

    springMVC通过ajax传递参数list对象或传递数组对象到后台

    环境:

    • 前台传递参数到后台
    • 前台使用ajax
    • 后台使用springMVC
    • 传递的参数是N多个对象

    JSON对象和JSON字符串

    在SpringMVC环境中,@RequestBody接收的是一个Json对象的字符串,而不是一个Json对象。然而在ajax请求往往传的都是Json对象,用 JSON.stringify(data)的方式就能将对象变成字符串。同时ajax请求的时候也要指定dataType: "json",contentType:"application/json" 这样就可以轻易的将一个对象或者List传到Java端!
    

    Content-Type

    服务器为什么会对表单提交和文件上传做特殊处理,因为表单提交数据是名值对的方式,且Content-Type为application/x-www-form-urlencoded,而文件上传服务器需要特殊处理,普通的post请求(Content-Type不是application/x-www-form-urlencoded)数据格式不固定,不一定是名值对的方式,所以服务器无法知道具体的处理方式,所以只能通过获取原始数据流的方式来进行解析。
    
    jquery在执行post请求时,会设置Content-Type为application/x-www-form-urlencoded,所以服务器能够正确解析,而使用原生ajax请求时,如果不显示的设置Content-Type,那么默认是text/plain,这时服务器就不知道怎么解析数据了,所以才只能通过获取原始数据流的方式来进行解析请求数据。
    

    第一种方式 传递的参数Bean

    jsp文件:
    $("#saveuddd").click(function(){
                        var saveDataAry=[];
                        var data1={"name":"test","password":"gz"};
                        var data2={"name":"ququ","password":"gr"};
                        saveDataAry.push(data1);
                        saveDataAry.push(data2);
                        $.ajax({
                            type:"POST",
                            url: basePath + "/user/saveUser",
                            dataType:"json",
                            contentType:"application/json", // 指定这个协议很重要
                            data:JSON.stringify(saveDataAry), //只有这一个参数,json格式,后台解析为实体,后台可以直接用
                            success:function(data){
                            }
                        });
                    })
    java文件
     @RequestMapping(value = "saveUser", method = {RequestMethod.POST })
         @ResponseBody
        public void saveu( @RequestBody List<User> users ){ //此时的user是map数据,并没有解析为bean // 不建议使用
             System.out.println(users) ;
        }
    使用如下方法,可以使用bean
     @RequestMapping(value = "saveUser", method = {RequestMethod.POST })
         @ResponseBody
        public void saveu( @RequestBody User[] users ){ 
             System.out.println(users.getName()) ; // 此时的user是实体bean
        }

    第二种方式 传递的键值对

    jsp同上
    另外一种:
     @RequestMapping(value = "saveUser", method = {RequestMethod.POST })
     @ResponseBody
     public void saveu( @RequestBody List<Map<String,String>> users ){ // spring MVC只能解析外层的json格式,内部的bean转化为Map格式的键值对,需要对map解析
          List<User> userList = new ArrayList<User>();
          for(Map<String,String> map : users){
              User u = new User();
              u.setName(map.get("name"));
              u.setPassword(map.get("password"));
              userList.add(u);
          }
         // 这里就可以使用 userList 了
     }

    第三种方式

    能够传递多个参数,但是每一个参数都是字符串(bean类型的数据会转化为JSON格式的字符串)

    jsp文件
    $("#saveuddd").click(function(){
                        var saveDataAry=[];
                        var data1={"name":"test","password":"gz"};
                        var data2={"name":"ququ","password":"gr"};
                        saveDataAry.push(data1);
                        saveDataAry.push(data2);
                        $.ajax({
                            type:"POST",
                            url: basePath + "/user/saveUser",
                            dataType:"json",
                            data:{users:JSON.stringify(saveDataAry),aa:"ddd"},
                              // 可以传递多个参数,但此时的users内容与另外一个参数:aa 的内容一起传递,所以后台解析为字符串
                             // 后台接收的users内容:[{"name":"test","password":"gz"},{"name":"ququ","password":"gr"}]
                             // 后台接收的 aa 内容:"ddd"
                            success:function(data){
    
                            }
                        });
                    })
    java文件
    @RequestMapping(value = "saveUser", method = {RequestMethod.POST })
         @ResponseBody
        public void saveu( String users , String aa ){
             System.out.println(users) ;
        }

    以上是自己整理思考而来,如愿意打赏,请微信扫描,金额随意~~

  • 相关阅读:
    php中读取文件内容的几种方法。(file_get_contents:将文件内容读入一个字符串)
    php标准库spl栈SplStack如何使用?
    js进阶正则表达式15验证身份证号(|符号的使用:var reg=/^d{17}[d|X]$|^d{15}$/)(str的方法substr)
    一步一步教你自定义博客园(cnblog)界面
    php中foreach源码分析(编译原理)
    php面试题12(多态web服务器共享session的方法:将session存到数据库)($val=&$data[$key];)
    前端开发必备调试工具(Chrome的F12自带的功能和firebug插件差不多)
    PHP 根据对象属性进行对象数组的排序(usort($your_data, "cmp");)(inside the class: usort($your_data, array($this, "cmp")))
    如何查看一个网页特定效果的js代码(动画效果可js和css)(页面可以看到js的源代码)
    bsh for android : 北京
  • 原文地址:https://www.cnblogs.com/jpfss/p/9323286.html
Copyright © 2011-2022 走看看