ajax傳遞引數給springmvc總結[轉]

Franson發表於2017-04-26

通過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>>更復雜物件

同理

相關文章