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接收,或者使用一个数组都可以。

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

  • 相关阅读:
    hql 链接查询
    Spring事务配置的五种方式
    web学习:Spring2.5+Hibernate3.3+Struts1.3整合小例子
    Strut2 spring hibernate 整合
    Spring+Struts集成(方案一)
    Remember that ordinal parameters are 1-based!
    ssh传输出现encountered 1 errors during the transfer解决办法
    编程时 对 用途这个字段定义时 不要用using 这个英文
    You can't specify target table 'charge' for update in FROM clause
    Navicat数据存放位置和备份数据库路径设置
  • 原文地址:https://www.cnblogs.com/xiaozhang666/p/13718717.html
Copyright © 2011-2022 走看看