@RequestParam傳遞陣列 @PathVariable傳遞陣列
阿新 • • 發佈:2021-10-18
今天新來的小夥伴問我前端傳陣列後端怎麼接收的問題
今天新來的小夥伴問我關於前端傳陣列,後端怎麼接收的問題,簡單:
@RequestParam接普通陣列
let test01 = () => {
let arr = [1, 2, 3, 4];
$.ajax({
url: "/controller/test01",
async: true,
data: {
name: arr
},
success: function (res) {
console.log(res)
},
type: "post",
dataType: "json"
})
}
接收引數
@RequestMapping("test01")
public void test01(@RequestParam("name[]") String[] name) {
System.out.println(name);
for (int i = 0; i < name.length; i++) {
System.out.println(name[i]);
}
}
這種方法接收成功,並且發現前端傳的數字,後端使用String也可以接受,因為在網路傳輸時都是字串,但是使用Int也完全可以。
list 一樣成功
@RequestMapping("test01")
public void test01(@RequestParam("name[]") List<String> name) {
System.out.println(name);
for (int i = 0; i < name.size(); i++) {
System.out.println(name.get(i));
}
}
@RequestParam接物件陣列
let test01 = () => {
let arro = [
{id: 1, username: "1"},
{id: 2, username: "2"}
];
$.ajax({
url: "/controller/test01",
async: true,
data: {
name: arro
},
success: function (res) {
console.log(res)
},
type: "post",
dataType: "json"
})
}
@RequestMapping("test01")
public void test01(@RequestParam("name[]") List<TestUser> name) {
System.out.println(name);
for (int i = 0; i < name.size(); i++) {
System.out.println(name.get(i));
}
}
這種方式無法對映不管是陣列還是list都無法對映,原因就在開頭貼的部落格裡,與springmvc的formdata接收引數的格式不符。複雜物件對映還是推薦 @RequestBody
@PathVariable 陣列傳遞
let test02 = () => {
let arr = [1, 2, 3, 4];
$.ajax({
url: "/controller/test02/" + arr,
async: true,
data: {},
success: function (res) {
console.log(res)
},
type: "post",
dataType: "json"
})
}
java程式碼
@RequestMapping("test02/{name}")
public void test02(@PathVariable List<String> name) {
System.out.println(name);
for (int i = 0; i < name.size(); i++) {
System.out.println(name.get(i));
}
}
@RequestMapping("test02/{name}")
public void test02(@PathVariable String[] name) {
System.out.println(name);
for (int i = 0; i < name.length; i++) {
System.out.println(name[i]);
}
}
ajax將陣列引數拼接成了字串用逗號分隔
所以使用單個String接收,或者使用一個數組都可以。
至於能否接收物件答案是不可以的。