ajax 入参为list_ajax传递参数list对象或传递数组对象到后台
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对象或传递数组对象到后台相关推荐
- ajax 入参为list_ajax传递给后台数组参数方式
出自:http://blog.csdn.net/lingxyd_0/article/details/10428785 在项目上用到了批量删除与批量更改状态,前台使用了EasyUI的DataGrid,用 ...
- ajax 入参为list_ajax向后台传递list参数
学习记录:复习 使用ajax向后台传递list参数 前台 jsp页面 测试 js function login222() { var list = []; for (var i = 1; i < ...
- ajax 入参为list_ajax向后台传入List
1. POJO public class Classtime { private Byte id; private String cno; private String ctime; 2. JS va ...
- java lua传参_Lua将函数参数作为表键传递
我正在努力将Lua表的内容导出到HTML文件,以便我可以在浏览器中显示内容 . 现在我遇到了将函数参数作为表键传递的问题 . 我有一个稀疏的表: map = {} for x = 1, 20 do m ...
- php命令行传递参数,PHP命令行传递参数
在以非命令行模式运行PHP的时候,我们可以通过$_GET.$_POST.$_REQUEST来接受get或是post参数,但是以命令行方式运行的话,怎么传递参数以接受参数呢?关于命令行的特点,可以直接看 ...
- android向h5传递参数,H5与安卓传递多个参数
之前写了H5与两端传递参数,是单个的,现在多个的时候遇到了问题,后台接受不到, 前端的json对象跟端上的不一样,得变成json字符串形式,而且需要商量好是按一个值接受还是多个. 下面是我写的全部: ...
- jsp传递参数java_JSP页面间传递参数方法介绍
JSP页面间传递参数是经常需要使用到的功能,有时还需要多个JSP页面间传递参数.下面介绍一下实现的方法. (1)直接在URL请求后添加 如:< a href="thexuan.jsp? ...
- c语言中的值传递和地址传递参数,c语言值传递,地址传递,引用传递
c语言值传递,地址传递,引用传递 总结:对于函数来说,值传递就是一个人来了,给你一些数 据,你对数据处理.地址传递就是你通过地址找到一个人,然后直接对这个人处理.而引用传递就是你要直接对一个人进行处 ...
- c语言可变入参中的每个参数的类型可以不同,编程入门:浅谈C语言的可变参数
C语言中有些函数使用可变参数,比如常见的int printf( const char* format, ...),第一个参数format是固定的,其余的参数的个数和类型都不固定. C语言用va_sta ...
最新文章
- 把Excel文件中的数据读入到DataGrid中
- linux撤销以硬件时钟作为UTC,linux时钟基本概念、CST与UTC、以及NTP简单设置
- Android各层推荐开发书籍及参考资料
- 《学习opencv》笔记——矩阵和图像处理——cvGEMM,cvGetCol,cvGetCols and cvGetDiag
- python 为何要学16进制,从十六进制Python中的补
- eclipse编辑器未包含main类型_Shopify模版编辑器问题排查及解决办法汇总
- ubuntu安装python环境_AirSim 无人驾驶教程(1)Airsim 在Ubuntu环境下的安装
- 如何在iOS和WatchKit中更改图像tintColor
- 软考中级软件设计师基础知识总结
- 2018年迎春杯复赛入围名单(四年级)
- Netty4.x 的逆袭之路 —— 再识 Netty
- oracle括号不区分中英,oracle查询不含括号及不含指定字符的方法
- LeetCode 834
- 维度表,实体表,事实表之间的关系
- java des解密乱码_des解密不完整,前面几位是乱码的解决办法
- 酒店智能门锁/门禁智能系统开发实例
- linux队列管理器复位,Linux如何实现MQ开机自动启动队列管理器
- 最新SWAPIDC本地后台登陆 – 替换包
- java开发环境搭建——mysql、navicat、powerDesigner下载安装
- 初中计算机竞赛面试题目及答案,2019上半年初中信息技术教师资格面试真题及答案(第二批)...
热门文章
- javascript模块 (Module) 简介
- call()与apply()的区别与作用
- c++ 构造函数数组_从 JS 数组操作到 V8 array.js
- 文件上传java前端怎么写_Javaweb文件上传的前端和后端
- memcached简单的使用教程
- 围绕sqlite构建一个简单的Typescript ORM
- 应用程序部署策略——虚拟机与容器
- 使用哪种关机方式后再启动计算机时间最长,有没有哪一种软件可以使电脑在设置好时间后自动开关机...
- jquery name选择器_Jquery--1
- centos overlay 占用很大_盘锦技术好的升降货梯占用空间小