• 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                     },


     

  • 相关阅读:
    django 登录验证的方法
    css table细边框样式
    django ORM创建实体,指定表,指定字段
    Kafka学习之路 (一)Kafka的简介
    NPIO导入导出excel文件
    .net里面<app.config>中value值不能填写特殊符号问题
    创建服务
    读取文本内容
    vs code 代码片段、提示
    .net core worker service安装运行再windows或linux
  • 原文地址:https://www.cnblogs.com/cainiao-Shun666/p/6766906.html
Copyright © 2020-2023  润新知