• ajax传递参数给springmvc总结[转]


    通过ajax传递参数给springmvc,经常会因为 参数类型太复杂,或者根本不知道springmvc都支持哪些类型转换,导致后台接收出现各种问题。如果书写格式没有问题仍然接受参数报错,大部分是因为springmvc默认无法支持该种格式的json转换导致的

    现在一句话解决,就是用@RequestBody注解接收

    下面看一些传参的例子,基本涵盖了大部分的参数传递类型

    案例1:简单数组 idList[]

    ajax

       $("#test1").on("click",function(){
                    var idList = new Array();
                    idList.push("1");
                    idList.push("2");
                    idList.push("3");
                    $.post("/mvc/client1/test1",{idList:idList})
                });

    java

      /**
         * 简单类型list
         * explain:包含string int date 等属性
         */
        @RequestMapping("/test1")
        @ResponseBody
        public void test1(@RequestParam("idList[]") List<Integer> idList){
            for(Integer i: idList){
                System.out.println(i);
            }
        }


    案例1中要注意,当你ajax传递一个很简单的数组,本以为后台能够接受到,却总是报错,很可能的原因是:http请求传递数组的时候,为了区别是一个数组,会在数组名称后面加上中括号“[]”,所以后台接受的时候用@RequestParam告诉方法,你要的idList实际上是idList[]就可以了

    案例:2:简单对象User (包含id,username)

    ajax

        $("#test2").on("click",function(){
                    var id          =1;
                    var username    ="fangxin";
                    $.post("/mvc/client1/test2",{id:id,username:username,birthday:new Date()})
                });

    java

       @RequestMapping("/test2")
        @ResponseBody
        public void test2(User user){
            System.out.println(user.getId());
            System.out.println(user.getUsername());
            System.out.println(user.getBirthday());
        }

    这就是最常见的传递参数,如果一个对象的属性都是简单类型,那基本没什么问题

    案例3:复杂对象User (包含id,username,String[],List<Person>)

    ajax

            $("#test3").on("click",function(){
                    var user = {
                        id:1,
                        username:"fangxin",
                        birthday:new Date(),
                        luckyNums:[1,2,3],
                        friends:[
                            {name:"zhangsan"},
                            {name:"lisi"}
                        ]
                    };
                    $.ajax({
                        type: "POST",
                        url:"/mvc/client1/test3",
                        data: JSON.stringify(user),
                        contentType:"application/json"
                    })
                });

    java

      /**
         * 复杂对象
         * explain:包含简单list属性、对象list属性
         */
        @RequestMapping("/test3")
        @ResponseBody
        public void test3(@RequestBody User user){
            System.out.println(user.getId());
            System.out.println(user.getUsername());
            System.out.println(user.getBirthday());
            for(Integer i:user.getLuckyNums()){
                System.out.println(i);
            }
            for(Person p:user.getFriends()){
                System.out.println(p.getName());
            }
        }

    案例3中的User的属性相当复杂,有简单数组,还有包含对象的复杂List,这样的user如果用案例2的方式接受,肯定就挂了。此时,最好是前台stringify转换成json字符串,后台用@RequestBody接受自动转换成想要的数据格式。

    案例4:复杂List<User>

    ajax

      $("#test5").on("click",function(){
                    var users = [];
                    for(var i=0;i<10;i++){
                        var user = {
                            id:1,
                            username:"fangxin",
                            birthday:new Date(),
                            luckyNums:[1,2,3],
                            friends:[
                                {name:"zhangsan"},
                                {name:"lisi"}
                            ]
                        };
                        users.push(user);
                    }
                    $.ajax({
                        type: "POST",
                        url:"/mvc/client1/test5/",
                        data: JSON.stringify(users),
                        contentType:"application/json"
                    })
                });

    java

      /**
         * 复杂List
         */
        @RequestMapping("/test5")
        @ResponseBody
        public void test5(@RequestBody List<User> users){
            for(User user:users){
                System.out.println(user.getUsername());
            }
        }

    用案例3的方式,依然可以接收到,屡试不爽。

    案例5 List<Map<String,Obj>>更复杂对象

    同理

  • 相关阅读:
    C#根据url生成唯一的key
    MyBatis基本配置和实践(四)
    MyBatis基本配置和实践(三)
    MyBatis基本配置和实践(二)
    MyBatis基本配置和实践(一)
    dbcp2、c3p0、druid连接池的简单配置
    HTTP长连接和短连接
    Java Web高性能开发
    三层构架 和 MVC 是什么?
    Docker bridge探索
  • 原文地址:https://www.cnblogs.com/franson-2016/p/6770028.html
Copyright © 2020-2023  润新知