使用getParameterMap()方法实现对请求参数的封装的工具类
我们知道,HttpServletRequest这个类的getParameter(name),getParameterValues(name)可以分别实现对页面传来的单个参数和对多个同名参数的接受。特别是getParameter(name)这个方法被用的次数特别多。有时候页面传来多个参数的情况下,要写多个request.getParameter(name)进行逐个接受,当然在springmvc框架下你可以在选择使用对象接受参数,也可以在方法上对参数进行逐个接收。但这样做的弊端在于在请求参数个数和名称变化的情况下,你需要创建不同的接受参数的对象进行接收,或者在你的方法上分别对参数进行接受(参数多的情况下,代码就显得很丑陋)。本文的目的在于使用 HttpServletRequest的getParameterMap()这个方法实现对请求参数的封装,下面直接上代码。
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry; import javax.servlet.http.HttpServletRequest; public class RequestParamsToMap {
//返回值类型为Map<String, Object>
public static Map<String, Object> getParameterMap(HttpServletRequest request) {
Map<String, String[]> properties = request.getParameterMap();//把请求参数封装到Map<String, String[]>中
Map<String, Object> returnMap = new HashMap<String, Object>();
Iterator<Entry<String, String[]>> iter = properties.entrySet().iterator();
String name = "";
String value = "";
while (iter.hasNext()) {
Entry<String, String[]> entry = iter.next();
name = entry.getKey();
Object valueObj = entry.getValue();
if (null == valueObj) {
value = "";
} else if (valueObj instanceof String[]) {
String[] values = (String[]) valueObj;
for (int i = 0; i < values.length; i++) { //用于请求参数中有多个相同名称
value = values[i] + ",";
}
value = value.substring(0, value.length() - 1);
} else {
value = valueObj.toString();//用于请求参数中请求参数名唯一
}
returnMap.put(name, value);
}
return returnMap;
}
//返回值类型为Map<String, String>
public static Map<String, String> getParameterStringMap(HttpServletRequest request) {
Map<String, String[]> properties = request.getParameterMap();//把请求参数封装到Map<String, String[]>中
Map<String, String> returnMap = new HashMap<String, String>();
String name = "";
String value = "";
for (Map.Entry<String, String[]> entry : properties.entrySet()) {
name = entry.getKey();
String[] values = entry.getValue();
if (null == values) {
value = "";
} else if (values.length>1) {
for (int i = 0; i < values.length; i++) { //用于请求参数中有多个相同名称
value = values[i] + ",";
}
value = value.substring(0, value.length() - 1);
} else {
value = values[0];//用于请求参数中请求参数名唯一
}
returnMap.put(name, value); }
return returnMap;
} }
代码就这么多,当然你要是想把得到的map集合转换成bean对象,可以使用 import org.apache.commons.beanutils.BeanUtils;类的BeanUtils.populate(bean, map)方法实现对map向bean的转换,这个方法会根据map的key值和bean对象的属性进行自动匹配(此时,推荐使用第一个方法)。
使用getParameterMap()方法实现对请求参数的封装的工具类的更多相关文章
- java通过当前请求得到访问者ip的工具类
在我们开发的过程中,也许有下面的这样的需求,就是要记录一下每次访问服务器的ip,需要存到数据库,以便以后进行数据分析等... 下面给大家介绍一个通过当前请求得到访问者ip的工具类 IpUtil.jav ...
- 4、处理方法中获取请求参数、请求头、Cookie及原生的servlet API等
1.请求参数和请求头 使用@RequestParam绑定请求参数,在处理方法的入参处使用该注解可以把请求参数传递给请求方法 —— value :参数名 —— required : 是否必须,默认为tr ...
- 可变参数和Collections集合工具类的方法_addAll&shuffle
可变参数 可变参数:是JDK1.5之后出现的新特性 使用前提:当方法的参数列表数据类型已经确定,但是参数的个数不确定,就可以使用可变参数 使用格式:定义方法时使用 ~修饰符 返回值类型 方法名(数据类 ...
- 轻松把玩HttpClient之封装HttpClient工具类(五),携带Cookie的请求
近期更新了一下HttpClientUtil工具类代码,主要是加入了一个參数HttpContext,这个是用来干嘛的呢?事实上是用来保存和传递Cookie所须要的. 由于我们有非常多时候都须要登录.然后 ...
- HTTP请求封装Java工具类
装载自:http://www.open-open.com/lib/view/open1384844838743.html package com.wiker; import java.io.Buffe ...
- 可变参数和Collections集合工具类
可变参数 /** * 可变参数:jdk1.5后出现的新特性 * 使用前期: * 当方法的参数列表数据类型已经确定的时候但是参数的个数不确定的时候就可以使用可变参数 * 使用格式:定义方法的时候使用 * ...
- SpringCloud中接收application/json格式的post请求参数并转化为实体类
@CrossOrigin(allowCredentials="true", allowedHeaders="*", methods={RequestMethod ...
- swift项目第十天:网络请求工具类的封装
import UIKit /* 必须先导入头文件:import AFNetworking */ import AFNetworking //MARK:-0:定义枚举:以枚举定义请求网络的get和pos ...
- Spring3 MVC请求参数获取的几种方法[转]
Spring3 MVC请求参数获取的几种方法 Spring3 MVC请求参数获取的几种方法 一. 通过@PathVariabl获取路径中的参数 @RequestMapping(value=& ...
随机推荐
- PHP AJAX技术
AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. AJAX 通过在后台与服务器进行少量数据交换,使网页实现异步更新.这意味着可以在不重载整个页面的情况下,对网页的某些部分进行更 ...
- POJ - 3061 Subsequence(连续子序列和>=s的最短子序列长度)
Description A sequence of N positive integers (10 < N < 100 000), each of them less than or eq ...
- 转:LoadRunner获取毫秒及字符串替换实现
今天做一个性能测试,参数化要求创建用户名不可以重复,想来想不没有什么好的办法来避免用户名字的重复.所以就想用时间+随机数来实现,但是实现中遇到一个问题. 名字中不可以包含.这个特殊的字符的.所以要处理 ...
- HTML元素分类:块级元素 内联元素和内联块状元素
在CSS中,html中的标签元素大体被分为三种不同的类型:块状元素.内联元素(又叫行内元素)和内联块状元素. 1,块状元素 常用的块状元素有: <div>.<p>.<h1 ...
- Learning
这里收录了2015年11月1日以来的githubOC排行版的框架,在此之前,已有前人收录的许多iOS开发框架,可以先参考: 4个优秀的总结: ?Github-iOS备忘 (国人总结的上百个 ...
- Material Design设计的开源代码
https://github.com/telly/FloatingAction http://www.csdn.net/article/2014-11-21/2822753-material-desi ...
- 写一个程序,统计自己C语言共写了多少行代码,Github基本操作
前言 在上一篇博客中,本人提到了自己的文件操作可以说是几乎没用过.现在想想,这也算是只在OJ上做题的一个弊端吧.虽然通过OJ做题是一个学习代码好手段,但其他方面也要多多涉猎才好,而不是说OJ用不到文件 ...
- 嵌入式linux插入内核模块Error: could not insert module xxx.ko: Device or resource busy处理
设备号冲突导致 处理方法: 1.输入$cat /proc/devices 查看驱动的设备号 2.选择一个不冲突的设备号进行编译 参考文献: 1.http://blog.csdn.net/zzc_19/ ...
- LCD12864 液晶显示-汉字及自定义显示(串口)
在网上找了许久,发现FPGA用串口驱动LCD12864程序很少,基本上没有.刚开始窃喜,中间郁闷,最后还是高兴,为什么这样说呢!头一回在没有参考程序的情况下,完全是照时序图写(自信),中间调试过程遇到 ...
- css3的::selection属性
大家都知道浏览器对选中的文本默认样式都是统一的,Windows下是一个深蓝色的背景,白字的前景,而在Mac下是一个淡蓝色背景,白色字体,就如上图所展示的一样,自从有了这个“::selection”选择 ...