標籤: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總結[轉]