@RequestParam和@PathVariable傳遞數組,json數組類型參數的實驗


在博客 https://www.cnblogs.com/xiaozhang666/p/13657846.html 中已經把 常規的參數接收 @RequestParam 正常傳參和 @RequestBody 的各種復雜傳參進行了實驗和記錄,@PathVariable 也有相應的解釋,那么@RequestParam和@PathVariable可不可以直接接收數組或者json數組,來試一下

@RequestParam 接普通數組

let test01 = () => {
  let arr = [1, 2, 3, 4];
   $.ajax({
      url: "/ssm/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: "/ssm/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: "/ssm/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接收,或者使用一個數組都可以。

至於能否接收對象答案是不可以的。

 


免責聲明!

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



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