SpringMVC接收複雜參數
1 前言
以前後端這邊接收的參數都是比較簡單的,直接使用@RequestParam或者@PathVariable在或者用一個對象就可以接收到了。但是最近突然遇到了前端需要傳遞很複雜資料的情況,以前沒有想到過的問題和别人的一些操作一下就在腦海中浮現了出來,感覺這個東西還是挺有用和挺有意思的。
###2 接收List<String>集合
js代碼
var returnArray = new Array();
returnArray.push("小紅");
returnArray.push("小白");
returnArray.push("小蘭");
$.ajax({
type:"post",
url:"listTest",
dataType:"json",
data:{
students:returnArray
},
success:function (data) {
},
error:function () {
}
})
java代碼
@PostMapping("/listTest")
public void listTest(@RequestParam("students[]") List<String> students) {
for (String temp : students) {
System.out.println(temp);
}
}
請求參數具體情況
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcsQXYtJ3bm9CXldWYtlWPzNXZj9mcw1ycz9WL49zYtJ2d1M1T0EERPh3aE5UMFpnTyUFVNZ3YXJmSkJjYzpkMMhHOpNGbOhFZ2BjMipWN5Nma1cFZ1w2RihWNpJGbo1WZ1Z1RhpXMpJmaxk3Y6lTbM5WOHJWao5WYtlTeMZTTINGMShUYvwlbj5yZtlmbkN3YuQnclZnbvN2Ztl2Lc9CX6MHc0RHaiojIsJye.jpg)
請求所傳參數名字為
students[]
,主要在接收的時候注意@RequestParam内所取參數的名字應該對應。
3 接收數組對象集合(這個對象不是簡單的基本類型,而是自己定義的對象,例如List<User>)
js代碼
var returnArray = new Array();
returnArray.push({name:"小紅",password:"111"});
returnArray.push({name:"小紅",password:"111"});
returnArray.push({name:"小紅",password:"111"});
$.ajax({
type:"post",
url:"/listUserTest",
contentType : 'application/json;charset=utf-8', //設定請求頭資訊(必須使用指定json格式)
dataType:"json",
data:JSON.stringify(returnArray),
success:function (data) {
},
error:function () {
}
})
java代碼
@PostMapping("/listUserTest")
//對應請求傳送資料的json格式,接收資料時需要加上@RequestBody,轉換json格式資料
public void listStudentTest(@RequestBody List<User> users) {
for (User user:users) {
System.out.println(user.toString());
}
}
不使用json格式傳輸資料
請求參數具體情況
當然除了使用對象接收外,還有一種方式接收這些資料,使用List<Map<String,Object>>
js代碼
var returnArray = new Array();
returnArray.push({name:"小紅",password:"111"});
returnArray.push({name:"小紅",password:"111"});
returnArray.push({name:"小紅",password:"111"});
$.ajax({
type:"post",
url:"/listMapTest",
contentType : 'application/json;charset=utf-8', //設定請求頭資訊
dataType:"json",
data:JSON.stringify(returnArray),
success:function (data) {
},
error:function () {
}
})
java代碼
@RequestMapping("/listMapTest")
public void listMapTest(@RequestBody List<Map<String,Object>> list) {
}
4 接收後端不存在映射對象,有多個參數
有時候前端傳過來的參數很多,但是後端又不存在對應的對象接收參數,這時,map就派上用場了。
js代碼
$.ajax({
type:"post",
url:"/mapTest",
dataType:"json",
data:{
userName:"小白",
password:"222"
},
success:function (data) {
},
error:function () {
}
})
java代碼
@RequestMapping("/mapTest")
//注意這裡需要添加一個@RequestParam,不能省略,不然無法接收參數
public void mapTest(@RequestParam Map<String, Object> params) {
Object userName = params.get("userName");
Object password = params.get("password");
}
請求參數具體情況
雖然這個看着和使用@RequestParam一個個指派參數差不多,但是确實有很大的不同,這個隻用一個Map就接收了所有參數,不用在接收參數的時候寫很多參數一個個接收。