zoukankan      html  css  js  c++  java
  • @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接收,或者使用一个数组都可以。

    至于能否接收对象答案是不可以的。

  • 相关阅读:
    json批量设置DIV属性
    随机产生div背景颜色变化
    发送验证码倒计时
    购物网站倒计时
    ARC066B
    [Poi2011]Conspiracy
    CF1103E Radix Sum
    NOI2018 冒泡排序
    CometOJ 5E
    NOI2020 命运
  • 原文地址:https://www.cnblogs.com/xiaozhang666/p/13718717.html
Copyright © 2011-2022 走看看