通過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>>更復雜對象
同理
