SpringMVC接收复杂集合对象(参数)代码示例

SpringMVC在接收集合请求参数时,需要在Controller方法的集合参数里前添加@RequestBody,而@RequestBody默认接收的enctype(MIME编码)是application/json,因此发送POST请求时需要设置请求报文头信息,否则SpringMVC在解析集合请求参数时不会自动的转换成JSON数据再解析成相应的集合。以下列举接收List<String>、List<User>、List<Map<String,Object>>、User[]、User(bean里面包含List)几种较为复杂的集合参数示例:

接收List<String>集合参数:

1、页面js代码:

Js代码

var idList = new Array();
idList.push(“1”);
idList.push(“2”);
idList.push(“3”);
var isBatch = false;
$.ajax({
  type: "POST",
  url: "<%=path%>/catalog.do?fn=deleteCatalogSchemes",
  dataType: 'json',
  data: {"idList":idList,"isBatch":isBatch},
  success: function(data){
    …
  },
  error: function(res){
    …
  }
}); 

2、Controller方法:

Java代码

@Controller
@RequestMapping("/catalog.do")
public class CatalogController { 

  @RequestMapping(params = "fn=deleteCatalogSchemes")
  @ResponseBody
  public AjaxJson deleteCatalogSchemes(@RequestParam("idList[]") List<String> idList,Boolean isBatch) {
      …
  }
} 

接收List<User>、User[]集合参数:

1、User实体类:

Java代码

public class User {
    private String name;
  private String pwd;
  //省略getter/setter
} 

2、页面js代码:

Js代码

var userList = new Array();
userList.push({name: "李四",pwd: "123"});
userList.push({name: "张三",pwd: "332"});
$.ajax({
  type: "POST",
  url: "<%=path%>/catalog.do?fn=saveUsers",
  data: JSON.stringify(userList),//将对象序列化成JSON字符串
  dataType:"json",
  contentType : 'application/json;charset=utf-8', //设置请求头信息
  success: function(data){
    …
  },
  error: function(res){
    …
  }
}); 

3、Controller方法:
Java代码

@Controller
@RequestMapping("/catalog.do")
public class CatalogController { 

  @RequestMapping(params = "fn=saveUsers")
  @ResponseBody
  public AjaxJson saveUsers(@RequestBody List<User> userList) {
    …
  }
} 

如果想要接收User[]数组,只需要把saveUsers的参数类型改为@RequestBodyUser[]userArray就行了。

接收List<Map<String,Object>>集合参数:

1、页面js代码(不需要User对象了):

Js代码

var userList = new Array();
userList.push({name: "李四",pwd: "123"});
userList.push({name: "张三",pwd: "332"});
$.ajax({
  type: "POST",
  url: "<%=path%>/catalog.do?fn=saveUsers",
  data: JSON.stringify(userList),//将对象序列化成JSON字符串
  dataType:"json",
  contentType : 'application/json;charset=utf-8', //设置请求头信息
  success: function(data){
    …
  },
  error: function(res){
    …
  }
}); 

2、Controller方法:
Java代码

@Controller
@RequestMapping("/catalog.do")
public class CatalogController { 

  @RequestMapping(params = "fn=saveUsers")
  @ResponseBody
  public AjaxJson saveUsers(@RequestBody List<Map<String,Object>> listMap) {
    …
  }
} 

接收User(bean里面包含List)集合参数:
1、User实体类:
Java代码

public class User {
  private String name;
  private String pwd;
  private List<User> customers;//属于用户的客户群
  //省略getter/setter
} 

2、页面js代码:

Js代码

var customerArray = new Array();
customerArray.push({name: "李四",pwd: "123"});
customerArray.push({name: "张三",pwd: "332"});
var user = {};
user.name = "李刚";
user.pwd = "888";
user. customers = customerArray;
$.ajax({
  type: "POST",
  url: "<%=path%>/catalog.do?fn=saveUsers",
  data: JSON.stringify(user),//将对象序列化成JSON字符串
  dataType:"json",
  contentType : 'application/json;charset=utf-8', //设置请求头信息
  success: function(data){
    …
  },
  error: function(res){
    …
  }
}); 

3、Controller方法:
Java代码

@Controller
@RequestMapping("/catalog.do")
public class CatalogController { 

  @RequestMapping(params = "fn=saveUsers")
  @ResponseBody
  public AjaxJson saveUsers(@RequestBody User user) {
    List<User> customers = user.getCustomers();
    …
  }
} 

总结

以上就是本文关于SpringMVC接收复杂集合对象(参数)代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:

SpringMVC拦截器实现监听session是否过期详解

SpringMVC开发restful API之用户查询代码详解

SpringMVC使用MultipartFile 实现异步上传方法介绍

如有不足之处,欢迎留言指出。

时间: 2017-11-12

Springmvc ajax跨域请求处理方法实例详解

上次给一个网站写网站  前后端分离 最后跪在ajax跨域上面了  自己在网上找了个方法  亲试可用  记录一下 写一个类  继承HandlerInterceptorAdapter package com.util; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.handler.Ha

SpringMVC框架实现上传图片的示例代码

一.创建图片虚拟目录 在上传图片之前,先要设置虚拟目录(以IDEA为例) 打开工具栏的运行配置Edit Configurations 添加物理目录和并设置虚拟目录路径 添加img图片在img文件夹内 测试访问:http://localhost:8080/img/img.jpg 二.SpringMVC上传头像 1.SpringMVC对多部件类型的解析 上传图片SpringMVC.xml配置 在页面form中提交enctype="multipart/form-data"的数据时,需要spr

详解IDEA用maven创建springMVC项目和配置

本文介绍了IDEA用maven创建springMVC项目和配置,分享给大家,具体如下: 工具准备:IDEA2016.3 Java jdk 1.8 1.DEA创建项目 新建一个maven project,并且选择webapp原型. 然后点击next 这里的GroupId和ArtifactID随意填写,但是ArtifactID最好和你的项目一名一样然后next 为了快一点创建,我们添加一个属性值,如图中亮的所示,点右边的加号,name=archetypeCatalog value=internal.

Spring+SpringMVC+MyBatis整合详细教程(SSM)

使用SSM(Spring.SpringMVC和Mybatis)已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没有记录SSM整合的过程,这次刚刚好基于自己的一个小项目重新搭建了一次,而且比项目搭建的要更好一些.以前解决问题的过程和方法并没有及时记录,以后在自己的小项目中遇到我再整理分享一下.这次,先说说三大框架整合过程.个人认为使用框架并不是很难,关键要理解其思想,这对于我们提高编程水平很有帮助.不过,如果用都不会,谈思想就

解决springMVC 跳转js css图片等静态资源无法加载的问题

web.xml中 servlet> <servlet-name>SpringMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-va

SpringMVC多个文件上传及上传后立即显示图片功能

多文件上传就是改良一个方法把MultipartFile类换成CommonsMultipartFile类,因为上传多个文件用数组方式的话MultipartFile类不能初始化,它不支持数组 package com.meng.upload; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import javax.servlet.http.HttpServletRe

springmvc无法访问/WEB-INF/views下的jsp的解决方法

最近在搭建springmvc的框架,遇到的这样的问题: 在地址栏访问登陆界面访问不了,http://localhost/XXXX/WEB-INF/views/login.jsp.直接返回404.查了一下,springmvc在对保护的资源是这样访问的. 1.首先在springmvc-servlet.xml中添加视图解析. <!-- 视图处理器 --> <bean id="viewResolver" class="org.springframework.web.

SpringMVC拦截器实现监听session是否过期详解

本文主要向大家介绍了SpringMVC拦截器实现:当用户访问网站资源时,监听session是否过期的代码,具体如下: 一.拦截器配置 <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**"/> <mvc:exclude-mapping path="/user/login"/> <!-- 不拦截登录请求 --> <mvc:exclude-

Springmvc拦截器执行顺序及各方法作用详解

实现HandlerInterceptor接口或者继承HandlerInterceptor的子类,比如Spring 已经提供的实现了HandlerInterceptor 接口的抽象类HandlerInterceptorAdapter ,下面讲实现其接口的写法,先看一下这个接口的三个方法. - 方法preHandle: 顾名思义,该方法将在请求处理之前进行调用,在controller之前执行.SpringMVC 中的Interceptor 是链式的调用的,在一个应用中或者说是在一个请求中可以同时存在

Android 动态注册监听网络变化实例详解

Android 动态注册监听网络变化实例详解 新建一个BroadcastTest项目,然后修改MainActivity中的代码,如下: public class MainActivity extends AppCompatActivity { private IntentFilter intentFilter; private NetworkChangeReceiver networkChangeReceiver; @Override protected void onCreate(Bundle

Android ListView里控件添加监听方法的实例详解

Android ListView里控件添加监听方法的实例详解 关于ListView,算是android中比较常见的控件,在ListView我们通常需要一个模板,这个模板指的不是住模块,而是配置显示在ListView里面的东西,今天做项目的时候发现想要添加一个ImageView监听方法,发现崩了,也许是好久没有动ListView竟然忘了不能直接在主UI的xml文件里面调用其他xml文件的控件,哪怕ListView用的是这个xml文件. [错误示范]: 直接调用ImageView这个控件是ListV

Android 监听网络状态方法详解

Android 监听网络状态方法详解 一.加入网络权限 获取网络信息需要在AndroidManifest.xml文件中加入相应的权限. <uses-permission Android:name="android.permission.ACCESS_NETWORK_STATE" /> 二.判断手机网络的几个方案 1)判断是否有网络连接 public boolean isMobileConnected(Context context) { if (context != nul

Struts2拦截器Interceptor的原理与配置实例详解

一.Struts2拦截器原理: Struts2拦截器的实现原理相对简单,当请求struts2的action时,Struts 2会查找配置文件,并根据其配置实例化相对的    拦截器对象,然后串成一个列表,最后一个一个地调用列表中的拦截器. 比如:应用要求用户登陆,且必须为指定用户名才可以查看系统中某个视图资源:否则,系统直接转入登陆页面.对于上面的需求,可以在每个Action的执行实际处理逻辑之前,先执行权限检查逻辑,但这种做法不利于代码复用.因为大部分Action里的权限检查代码都大同小异,故

jQuery绑定事件监听bind和移除事件监听unbind用法实例详解

本文实例讲述了jQuery绑定事件监听bind和移除事件监听unbind用法.分享给大家供大家参考,具体如下: 这里分别采用后bind(eventType,[data],Listener)//data为可选参数,one()该方法绑定的事件触发一次后自动删除,unbind(eventType,Listener), 实例: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w

Android监听Home键实例详解

本文实例讲述了Android监听Home键的方法.分享给大家供大家参考,具体如下: 将到android中Home键的监听,很多人第一反应时重写相应Activity的onKeyDown()方法,监听当按下的键的keyCode为KEYCODE_HOME时,进行自己的相应的处理.如: @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_HOME) { stop

详解SpringMVC拦截器配置及使用方法

本文介绍了SpringMVC拦截器配置及使用方法,分享给大家,具体如下: 常见应用场景 1.日志记录:记录请求信息的日志,以便进行信息监控.信息统计.计算PV(Page View)等. 2.权限检查:如登录检测,进入处理器检测检测是否登录,如果没有直接返回到登录页面: 3.性能监控:有时候系统在某段时间莫名其妙的慢,可以通过拦截器在进入处理器之前记录开始时间,在处理完后记录结束时间,从而得到该请求的处理时间(如果有反向代理,如apache可以自动记录): 4.通用行为:读取cookie得到用户信

详解SpringMVC拦截器(资源和权限管理)

本文主要介绍了SpringMVC拦截器,具体如下: 1.DispatcherServlet SpringMVC具有统一的入口DispatcherServlet,所有的请求都通过DispatcherServlet. DispatcherServlet是前置控制器,配置在web.xml文件中的.拦截匹配的请求,Servlet拦截匹配规则要自已定义,把拦截下来的请求,依据某某规则分发到目标Controller来处理.  所以我们现在web.xml中加入以下配置: <!-- 初始化 Dispatcher