• springMVC绑定json参数之一


    一、SpringMVC @RequestBody接收Json对象字符串

    以前,一直以为在SpringMVC环境中,@RequestBody接收的是一个Json对象,一直在调试代码都没有成功,后来发现,其实 @RequestBody接收的是一个Json对象的字符串,而不是一个Json对象。然而在ajax请求往往传的都是Json对象,后来发现用
    JSON.stringify(data)的方式就能将对象变成字符串。同时ajax请求的时候也要指定dataType: "json",contentType:"application/json" 这样就可以轻易的将一个对象或者List传到Java端,使用@RequestBody即可绑定对象或者List.

    下面一个例子需要大家注意:

    JavaScript 代码:

    <script type="text/javascript">  
        $(document).ready(function(){  
        test = function () {
            var test = [{"userName":"test","address":"gz"}, 
                     {"userName":"ququ","address":"gr"} 
                     ];

             jQuery.ajax({ 
             url : cur_url+"/weekly/test", 
             type : 'post', 
             data : JSON.stringify(test), 
             dataType : 'json',
             contentType:'application/json;charset=utf-8',
             success : function (data, textStatus) {
                  console.info(data);
                  alert("test success!");
             },
             error:function(){
                  alert("test error!");
             }
        });
     };

      });
    </script>

    Java代码

        @RequestMapping("/test")
        @ResponseBody
        public List<User> test(@RequestBody List<User> t) {
          
           
            return t;
        }

    这样是不可以的。因为spring MVC不会自动转换为List<User>对象。传到后台后,List中是LinkedHashMap类型。

    这时需要使用数组接受,如下:

        @RequestMapping("/test")
        @ResponseBody
        public List<User> test(@RequestBody User[] t) {
           for (User user : t) {
            System.out.println("user:" + user);
            System.out.println("userName:" + user.getUserName());
            System.out.println("address:" + user.getAddress());
            
           }
           List<User> tt = Arrays.asList(t);
           for (int i = 0; i < tt.size(); i++) {
               User u = tt.get(i);
               System.out.println(i + "tt:" + u);
           }
           return tt;
            
        }

    这样就可以正常接收ajax发送的json数组字符串,上面也演示了该数组可以转为list。这里数组名称t不用和前台test对应,只要前台传过来的数组中对象可以对应user对象就行。

    这里返回的list<User>转为的json字符串,前台接收如下:

    1 success : function (data, textStatus) { 
    2                         console.info(data);
    3                         console.info(data.length);
    4                         for ( var i = 0; i < data.length; i++) {
    5                             console.info(i + ":" + data[i].address);
    6                             console.info(i + ":" + data[i].userName);
    7                         }
    8                         alert("test success!");
    9                     },


     

  • 相关阅读:
    《应用Yii1.1和PHP5进行敏捷Web开发》学习笔记(转)
    YII 小模块功能
    Netbeans代码配色主题大搜集
    opensuse 启动巨慢 解决方法 90s多
    opensuse 安装 网易云音乐 rpm netease music
    linux qq rpm deb opensuse
    openSUSE 安装 alien
    第一行代码 Android 第2版
    Android Studio AVD 虚拟机 联网 失败
    docker error during connect: Get http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.29/containers/json: open //./pipe/docker_engine: The system cannot find the file specified. In the default daemon configuratio
  • 原文地址:https://www.cnblogs.com/cainiao-Shun666/p/6766906.html
Copyright © 2020-2023  润新知