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>>更復雜對象

同理


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM