SpringMVC传递与接收数组或列表参数

当用户在页面触发某种请求时,一般会将一些参数(key/value)带到后台。在SpringMVC中可以通过参数绑定,将客户端请求的key/value数据绑定到Controller处理器方法的形参上。

有时候前端请求的数据是批量的,此时就要求Web端去处理请求时,获取这些批量的请求参数。一般批量的请求参数在Java中是以数组或者集合的形式接收的,而SpringMVC提供了接收和解析数据和集合参数类型的机制。

推荐文章:《SpringMVC请求参数的绑定与@RequestParam注解的使用》

1、 数组类型的请求参数 

数组类型的请求参数,在HTML页面可能出现类似复选框的表单,让用户选择一个或者多个数据进行操作。

【示例】实现批量删除功能,在HTML页面中通过复选框选择一个或者多个用户信息,并提交到后台,后台Controller控制器中的方法获取数组类型的请求参数。

(1)创建HTML页面,通过复选框选择一个或者多个用户信息,并提交到后台。



数组类型的请求参数



编号用户名称博客信息
1pan_junbiao的博客您好,欢迎访问 pan_junbiao的博客
2pan_junbiao的博客https://blog.csdn.net/pan_junbiao
3pan_junbiao的博客您好,欢迎访问 pan_junbiao的博客
4pan_junbiao的博客https://blog.csdn.net/pan_junbiao
5pan_junbiao的博客您好,欢迎访问 pan_junbiao的博客

页面执行结果:

(2)编写Controller控制器中的执行方法,获取数组类型的请求参数。

/*** 批量删除用户信息* @param userIds 数组* @author pan_junbiao*/
@RequestMapping("/batchDeleteUser")
@ResponseBody
public boolean batchDeleteUser(@RequestParam(value="userIds[]") Integer[] userIds)
{//参数验证if (userIds == null || userIds.length == 0){return false;}//打印数组System.out.println("用户编号:");Arrays.stream(userIds).forEach(System.out::println);//执行后台批量删除(忽略代码)return true;
}

注意:在后台控制器方法的参数声明中一定要添加 @RequestParam(value="userIds[]") 语句,否则无法获取提交的用户编号数组。

控制台输出结果: 

 

2、List类型的请求参数

List类型的请求参数。当想把页面上的批量数据通过SpringMVC转换为Web端的List类型的对象时,处理器适配器会转换格式将请求参数解析为相应的List集合。

【示例】实现批量新增功能,前端HTML页面提交多条用户信息,后台Controller控制器中的方法获取List类型的请求参数。

(1)创建HTML页面,提交多条用户信息到后台Controller控制器中的方法。



List类型的请求参数





(2)创建用户信息实体类(UserInfo.java)。

package com.pjb.entity;/*** 用户信息实体类* @author pan_junbiao**/
public class UserInfo
{private int userId; //用户编号private String userName; //用户姓名private String blogRemark; //博客信息//省略getter与setter方法...@Overridepublic String toString(){return "编号:" + this.userId + "  用户:" + this.userName +  "  博客:" + this.blogRemark;}
}

(3)编写Controller控制器中的执行方法,获取List类型的请求参数。

/*** 批量新增用户信息* @param userInfoList 列表* @author pan_junbiao*/
@RequestMapping("/batchAddUser")
@ResponseBody
public boolean batchAddUser(@RequestBody List userInfoList)
{//参数验证if (userInfoList == null || userInfoList.size()==0){return false;}//打印数组System.out.println("用户列表:");userInfoList.stream().forEach(System.out::println);//执行后台批量新增(忽略代码)return true;
}

注意:在后台控制器方法的参数声明中一定要添加 @RequestBody 注解,@RequestBody 注解的特点就是,根据请求参数的Content-Type决定是否将相关格式转换至包装类,如果Content-Type是目标类型,就进行转换。这里转换的是JSON数据,所有要求将前端请求的Content-Type指定为“application/json”类型。

控制台输出结果: 

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部