前言

本文主要是记录SpringMVC中当前台传过来数组的时候,如何把前台传过来的数据封装到Controller层方法的形参中。

在了解下面参数如何传递前先记住两个结论

  • 当Ajax以application/x-www-form-urlencoded编码格式上传数据,必须使用JSON对象传递数据,后台需要使用@RequestParam 或者HttpServletRequest来接收数据
  • 当Ajax以application/json编码格式上传数据,必须使用JSON字符串传递数据,后台需要使用@RquestBody标识参数来获取数据,使用Map或者实体对象来接收数据,如果只单单是接收一个数组,可以使用List来接收数据。

1.前台发送String和基本类型数组

前台数据的发送(发送json对象(或js对象)

$(function () {
    var obj={};
    obj.name="李四";
    obj.nums=[1,2,3];
    $.ajax({
        url: "/param/test1",
        type:"POST",
        contentType:"application/x-www-form-urlencoded",
        data:obj,
        dataType:"json",
        success:function(data){
        }
    })
})

后台接收数据

后台接收数据时的形参必须和前台表单里的字段名一样(如果不一致要使用@RequestParam声明,数组必须声明)

 	@RequestMapping(value = "/test1", method = RequestMethod.POST)
    @ResponseBody
    private String Test1(String name,@RequestParam("nums[]") Integer[] nums) {
        System.out.println(name);
        for(int i=0;i<nums.length;i  ){
            System.out.println(nums[i]);
        }
        return "success";
    }

当然,也可以使用List来接收

	@RequestMapping(value = "/test1", method = RequestMethod.POST)
    @ResponseBody
    private String Test1(String name,@RequestParam("nums[]") List<Integer> nums) {
        System.out.println(name);
        System.out.println(nums);
        return "success";
    }

对于上面的这两种接收方式只适用于接收基本类型或包装类型的数组。

2.前台发送String类型和对象数组

一些将要使用的类

public class User {
    private String name;
    private int age;
	//getter and setter...
}
public class StringAndList {
    private List<User> users;
    private String name;
	//getter and setter...
}

前端发送json字符串(注意:这里使用application/json

$(function () {
    var obj={};
    obj.name="展示";
    var user1={"name":"李四","age":1};
    var user2={"name":"网四","age":23};
    obj.users=[];
    obj.users.push(user1);
    obj.users.push(user2);
    var s=JSON.stringify(obj);
    $.ajax({
        url: "/param/test1",
        type:"POST",
        contentType:"application/json",//注意编码格式
        data:JSON.stringify(obj),//"{"name":"展示","users":[{"name":"李四","age":1},{"name":"网四","age":23}]}"

        dataType:"json",
        success:function(data){
        }
    })
})

后台接收数据

一个方法中只允许有一个@RequestBody修饰的参数(此时方法中只可以有一个形参),它实际上是将输入流的body体作为一个整体进行转换,而body整体只有一份,解析完成之后会关闭输入流。

如果传入多个参数则会报错,除非自定义参数解析器。

所以当我们既要接收String参数,又要接收对象数组的时候,我们只能把这两个参数封装在一个自定义类中。

	@RequestMapping(value = "/test1", method = RequestMethod.POST)
    @ResponseBody
    private String Test1(@RequestBody StringAndList sal) {
        System.out.println(sal);
        return "success";
    }

前面不是说可以使用Map来接收数据吗,那使用Map来接收的数据是怎么样的呢?

我们来试试

	@RequestMapping(value = "/test1", method = RequestMethod.POST)
    @ResponseBody
    private String Test1(@RequestBody Map<String,Object> map) {
        return "success";
    }

通过debug,我们可以发现map保存的数据是什么(我们可以把传过来的json对象中的属性-值想象成一个个key-value,就不难理解为什么可以用Map接收了)

3.前台只发送对象数组

上面展示了同时接收其他类型和对象数组的情况,那么如果只接收对象数组呢?

前端发送json字符串

$(function () {
    var obj=[];
    var user1={"name":"李四","age":1};
    var user2={"name":"网四","age":23};
    obj.push(user1);
    obj.push(user2);
    var s=JSON.stringify(obj);//"[{"name":"李四","age":1},{"name":"网四","age":23}]"
    $.ajax({
        url: "/param/test1",
        type:"POST",
        contentType:"application/json",
        data:JSON.stringify(obj),
        dataType:"json",
        success:function(data){
        }
    })
})

后台接收数据

因为只要接收数组,所以不用自定义一个类来封装数据

	@RequestMapping(value = "/test1", method = RequestMethod.POST)
    @ResponseBody
    private String Test1(@RequestBody List<User> users) {//参数名任意
        System.out.println(users);
        return "success";
    }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持Devmax。

SpringMVC参数的传递之如何接收List数组类型的数据的更多相关文章

  1. Swift 字符串替换/过滤/切割/拼接

    替换为/结果过滤过滤掉单个字符/结果过滤掉开头和结尾的空白结果切割对字符串使用/作为分隔符来切割,不允许空字符串使用split函数结果是一个数组对字符串使用/作为分隔符来切割,允许空字符串结果拼接结果

  2. Swift开发教程--字符串的操作

    替换把?替换为/结果

  3. swift 网络搜索热词排行

    1.使用www.showapi.com上的接口,需要注册添加一个App,这样才能获取appid和secret密钥,调用前需要订购套餐(选免费的就可以了);2.外部库Podfile文件内容,SnapKit这里暂时不需要用到:3.桥接头文件参考:http://www.jb51.cc/article/p-pcleyxep-te.html4.AppTransportSecurityhasblockedac

  4. 如何在Swift中打乱数组?

    如何随机化或混洗Swift中的数组中的元素?例如,如果我的数组包括52张扑克牌,我想洗牌,以便洗牌。这个答案详细说明了如何在Swift的各种版本中添加Fisher-Yatesshuffle。Swift3版本是最宽松的,但是它们至少可以用于数组。每个Swift版本的命名和行为与该版本的mutating和nonmutating排序方法相匹配。

  5. unit-testing – 如何在Swift中对NSFetchedResultsController进行单元测试

    我有一个Swift应用程序,它使用NSFetchedResultsController从持久存储中获取List对象:它的工作方式与预期的一样,我将List对象描述打印到控制台.我想为我的应用程序编写一些单元测试,所以我创建了扩展XCTestCase的类.代码编译没有问题,测试运行,但不幸的是我无法在该上下文中获取List对象.我在控制台中获得的所有内容都是List对象的数量和致命错误:线路上升:我

  6. swift – 检查自定义对象数组是否包含特定的自定义对象

    说我有一个非常简单的Person类我希望将一个这样的人的集合存储在一个属性中,该属性是一个Person类的数组,类型为Person也许我实现如下问题:我如何检查people.list是否包含实例alex,好吗?

  7. swift – 使用反射来设置对象属性,而不使用setValue forKey

    在Swift中,不可能使用.setValue(…)>可空类型字段,如Int?>具有枚举类型的属性>一个可空对象的数组,如[MyObject?]这有一个解决方法,也就是通过覆盖对象本身中的UnVersionKey方法的setValue.因为我正在写一个基于反射的通用对象映射器.请参阅EVReflection我想尽量减少这种手动映射.是否有其他方式自动设置这些属性?

  8. Swift Sliceable上的递归

    事实证明,有一个通用的解决方案.您需要添加这些通用要求:对于发布的问题,这给出了:这是任何切片上有用的通用缩减:我不能相信这一点,Apple开发论坛上的解决方案是posted.令人遗憾的是,通用要求如此涉及到这样一个基本操作–它几乎不直观!

  9. uitableview – 使用Swift的“使用未解析的标识符”

    我正在重写我在Swift中的一个应用程序,它显示SouthKohala的实时天气数据.爱Swift到目前为止!

  10. Android Checkbox listview选择全部(禁用/启用)

    参见英文答案>SelectingAllItemsinaListviewoncheckboxselect4个我想禁用/启用listview中的所有复选框.infact想通过单击顶部复选框来选择所有行为.谢谢解决方法这是我最终工作的地方,我正在使用游标适配器,而不仅仅是我的列表项的Arraylistadapter:list.getChildCount不起作用,因为它似乎只计算立即绘制的内容(不是屏幕外

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部