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

來源:互聯網
上載者:User

標籤:system   app   包含   ret   get   public   client   push   ons   

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

同理

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.