springMVC通过ajax传递参数list对象或传递数组对象到后台

环境:

前台传递参数到后台

前台使用ajax

后台使用springMVC

传递的参数是N多个对象

JSON对象和JSON字符串

在SpringMVC环境中,@RequestBody接收的是一个Json对象的字符串,而不是一个Json对象。然而在ajax请求往往传的都是Json对象,用 JSON.stringify(data)的方式就能将对象变成字符串。同时ajax请求的时候也要指定dataType: "json",contentType:"application/json" 这样就可以轻易的将一个对象或者List传到Java端!

Content-Type

服务器为什么会对表单提交和文件上传做特殊处理,因为表单提交数据是名值对的方式,且Content-Type为application/x-www-form-urlencoded,而文件上传服务器需要特殊处理,普通的post请求(Content-Type不是application/x-www-form-urlencoded)数据格式不固定,不一定是名值对的方式,所以服务器无法知道具体的处理方式,所以只能通过获取原始数据流的方式来进行解析。

jquery在执行post请求时,会设置Content-Type为application/x-www-form-urlencoded,所以服务器能够正确解析,而使用原生ajax请求时,如果不显示的设置Content-Type,那么默认是text/plain,这时服务器就不知道怎么解析数据了,所以才只能通过获取原始数据流的方式来进行解析请求数据。

第一种方式 传递的参数Bean

jsp文件:

$("#saveuddd").click(function(){

var saveDataAry=[];

var data1={"name":"test","password":"gz"};

var data2={"name":"ququ","password":"gr"};

saveDataAry.push(data1);

saveDataAry.push(data2);

$.ajax({

type:"POST",

url: basePath + "/user/saveUser",

dataType:"json",

contentType:"application/json", // 指定这个协议很重要

data:JSON.stringify(saveDataAry), //只有这一个参数,json格式,后台解析为实体,后台可以直接用

success:function(data){

}

});

})

java文件

@RequestMapping(value = "saveUser", method = {RequestMethod.POST })

@ResponseBody

public void saveu( @RequestBody List users ){ //此时的user是map数据,并没有解析为bean // 不建议使用

System.out.println(users) ;

}

使用如下方法,可以使用bean

@RequestMapping(value = "saveUser", method = {RequestMethod.POST })

@ResponseBody

public void saveu( @RequestBody User[] users ){

System.out.println(users.getName()) ; // 此时的user是实体bean

}

第二种方式 传递的键值对

jsp同上

另外一种:

@RequestMapping(value = "saveUser", method = {RequestMethod.POST })

@ResponseBody

public void saveu( @RequestBody List> users ){ // spring MVC只能解析外层的json格式,内部的bean转化为Map格式的键值对,需要对map解析

List userList = new ArrayList();

for(Map map : users){

User u = new User();

u.setName(map.get("name"));

u.setPassword(map.get("password"));

userList.add(u);

}

// 这里就可以使用 userList 了

}

第三种方式

能够传递多个参数,但是每一个参数都是字符串(bean类型的数据会转化为JSON格式的字符串)

jsp文件

$("#saveuddd").click(function(){

var saveDataAry=[];

var data1={"name":"test","password":"gz"};

var data2={"name":"ququ","password":"gr"};

saveDataAry.push(data1);

saveDataAry.push(data2);

$.ajax({

type:"POST",

url: basePath + "/user/saveUser",

dataType:"json",

data:{users:JSON.stringify(saveDataAry),aa:"ddd"},

// 可以传递多个参数,但此时的users内容与另外一个参数:aa 的内容一起传递,所以后台解析为字符串

// 后台接收的users内容:[{"name":"test","password":"gz"},{"name":"ququ","password":"gr"}]

// 后台接收的 aa 内容:"ddd"

success:function(data){

}

});

})

java文件

@RequestMapping(value = "saveUser", method = {RequestMethod.POST })

@ResponseBody

public void saveu( String users , String aa ){

System.out.println(users) ;

}

ajax 入参为list_ajax传递参数list对象或传递数组对象到后台相关推荐

  1. ajax 入参为list_ajax传递给后台数组参数方式

    出自:http://blog.csdn.net/lingxyd_0/article/details/10428785 在项目上用到了批量删除与批量更改状态,前台使用了EasyUI的DataGrid,用 ...

  2. ajax 入参为list_ajax向后台传递list参数

    学习记录:复习 使用ajax向后台传递list参数 前台 jsp页面 测试 js function login222() { var list = []; for (var i = 1; i < ...

  3. ajax 入参为list_ajax向后台传入List

    1. POJO public class Classtime { private Byte id; private String cno; private String ctime; 2. JS va ...

  4. java lua传参_Lua将函数参数作为表键传递

    我正在努力将Lua表的内容导出到HTML文件,以便我可以在浏览器中显示内容 . 现在我遇到了将函数参数作为表键传递的问题 . 我有一个稀疏的表: map = {} for x = 1, 20 do m ...

  5. php命令行传递参数,PHP命令行传递参数

    在以非命令行模式运行PHP的时候,我们可以通过$_GET.$_POST.$_REQUEST来接受get或是post参数,但是以命令行方式运行的话,怎么传递参数以接受参数呢?关于命令行的特点,可以直接看 ...

  6. android向h5传递参数,H5与安卓传递多个参数

    之前写了H5与两端传递参数,是单个的,现在多个的时候遇到了问题,后台接受不到, 前端的json对象跟端上的不一样,得变成json字符串形式,而且需要商量好是按一个值接受还是多个. 下面是我写的全部: ...

  7. jsp传递参数java_JSP页面间传递参数方法介绍

    JSP页面间传递参数是经常需要使用到的功能,有时还需要多个JSP页面间传递参数.下面介绍一下实现的方法. (1)直接在URL请求后添加 如:< a href="thexuan.jsp? ...

  8. c语言中的值传递和地址传递参数,c语言值传递,地址传递,引用传递

     c语言值传递,地址传递,引用传递 总结:对于函数来说,值传递就是一个人来了,给你一些数 据,你对数据处理.地址传递就是你通过地址找到一个人,然后直接对这个人处理.而引用传递就是你要直接对一个人进行处 ...

  9. c语言可变入参中的每个参数的类型可以不同,编程入门:浅谈C语言的可变参数

    C语言中有些函数使用可变参数,比如常见的int printf( const char* format, ...),第一个参数format是固定的,其余的参数的个数和类型都不固定. C语言用va_sta ...

最新文章

  1. 把Excel文件中的数据读入到DataGrid中
  2. linux撤销以硬件时钟作为UTC,linux时钟基本概念、CST与UTC、以及NTP简单设置
  3. Android各层推荐开发书籍及参考资料
  4. 《学习opencv》笔记——矩阵和图像处理——cvGEMM,cvGetCol,cvGetCols and cvGetDiag
  5. python 为何要学16进制,从十六进制Python中的补
  6. eclipse编辑器未包含main类型_Shopify模版编辑器问题排查及解决办法汇总
  7. ubuntu安装python环境_AirSim 无人驾驶教程(1)Airsim 在Ubuntu环境下的安装
  8. 如何在iOS和WatchKit中更改图像tintColor
  9. 软考中级软件设计师基础知识总结
  10. 2018年迎春杯复赛入围名单(四年级)
  11. Netty4.x 的逆袭之路 —— 再识 Netty
  12. oracle括号不区分中英,oracle查询不含括号及不含指定字符的方法
  13. LeetCode 834
  14. 维度表,实体表,事实表之间的关系
  15. java des解密乱码_des解密不完整,前面几位是乱码的解决办法
  16. 酒店智能门锁/门禁智能系统开发实例
  17. linux队列管理器复位,Linux如何实现MQ开机自动启动队列管理器
  18. 最新SWAPIDC本地后台登陆 – 替换包
  19. java开发环境搭建——mysql、navicat、powerDesigner下载安装
  20. 初中计算机竞赛面试题目及答案,2019上半年初中信息技术教师资格面试真题及答案(第二批)...

热门文章

  1. javascript模块 (Module) 简介
  2. call()与apply()的区别与作用
  3. c++ 构造函数数组_从 JS 数组操作到 V8 array.js
  4. 文件上传java前端怎么写_Javaweb文件上传的前端和后端
  5. memcached简单的使用教程
  6. 围绕sqlite构建一个简单的Typescript ORM
  7. 应用程序部署策略——虚拟机与容器
  8. 使用哪种关机方式后再启动计算机时间最长,有没有哪一种软件可以使电脑在设置好时间后自动开关机...
  9. jquery name选择器_Jquery--1
  10. centos overlay 占用很大_盘锦技术好的升降货梯占用空间小