使用getParameterMap()方法实现对请求参数的封装的工具类

  我们知道,HttpServletRequest这个类的getParameter(name),getParameterValues(name)可以分别实现对页面传来的单个参数和对多个同名参数的接受。特别是getParameter(name)这个方法被用的次数特别多。有时候页面传来多个参数的情况下,要写多个request.getParameter(name)进行逐个接受,当然在springmvc框架下你可以在选择使用对象接受参数,也可以在方法上对参数进行逐个接收。但这样做的弊端在于在请求参数个数和名称变化的情况下,你需要创建不同的接受参数的对象进行接收,或者在你的方法上分别对参数进行接受(参数多的情况下,代码就显得很丑陋)。本文的目的在于使用 HttpServletRequest的getParameterMap()这个方法实现对请求参数的封装,下面直接上代码。

 1 import java.util.HashMap;
 2 import java.util.Iterator;
 3 import java.util.Map;
 4 import java.util.Map.Entry;
 5
 6 import javax.servlet.http.HttpServletRequest;
 7
 8 public class RequestParamsToMap {
 9   //返回值类型为Map<String, Object>
10     public static Map<String, Object> getParameterMap(HttpServletRequest request) {
11         Map<String, String[]> properties = request.getParameterMap();//把请求参数封装到Map<String, String[]>中
12         Map<String, Object> returnMap = new HashMap<String, Object>();
13         Iterator<Entry<String, String[]>> iter = properties.entrySet().iterator();
14         String name = "";
15         String value = "";
16         while (iter.hasNext()) {
17             Entry<String, String[]> entry = iter.next();
18             name = entry.getKey();
19             Object valueObj = entry.getValue();
20             if (null == valueObj) {
21                 value = "";
22             } else if (valueObj instanceof String[]) {
23                 String[] values = (String[]) valueObj;
24                 for (int i = 0; i < values.length; i++) { //用于请求参数中有多个相同名称
25                     value = values[i] + ",";
26                 }
27                 value = value.substring(0, value.length() - 1);
28             } else {
29                 value = valueObj.toString();//用于请求参数中请求参数名唯一
30             }
31             returnMap.put(name, value);
32         }
33         return returnMap;
34     }
35     //返回值类型为Map<String, String>
36     public static Map<String, String> getParameterStringMap(HttpServletRequest request) {
37         Map<String, String[]> properties = request.getParameterMap();//把请求参数封装到Map<String, String[]>中
38         Map<String, String> returnMap = new HashMap<String, String>();
39         String name = "";
40         String value = "";
41         for (Map.Entry<String, String[]> entry : properties.entrySet()) {
42             name = entry.getKey();
43             String[] values = entry.getValue();
44             if (null == values) {
45                 value = "";
46             } else if (values.length>1) {
47                 for (int i = 0; i < values.length; i++) { //用于请求参数中有多个相同名称
48                     value = values[i] + ",";
49                 }
50                 value = value.substring(0, value.length() - 1);
51             } else {
52                 value = values[0];//用于请求参数中请求参数名唯一
53             }
54             returnMap.put(name, value);
55
56         }
57         return returnMap;
58     }
59
60 }

代码就这么多,当然你要是想把得到的map集合转换成bean对象,可以使用 import org.apache.commons.beanutils.BeanUtils;类的BeanUtils.populate(bean, map)方法实现对map向bean的转换,这个方法会根据map的key值和bean对象的属性进行自动匹配(此时,推荐使用第一个方法)。

时间: 2024-08-27 00:56:46

使用getParameterMap()方法实现对请求参数的封装的工具类的相关文章

轻松把玩HttpClient之封装HttpClient工具类(六),封装输入参数,简化工具类

在写这个工具类的时候发现传入的参数太多,以至于方法泛滥,只一个send方法就有30多个,所以对工具类进行了优化,把输入参数封装在一个对象里,这样以后再扩展输入参数,直接修改这个类就ok了. 不多说了,先上代码: /** * 请求配置类 * * @author arron * @date 2016年2月2日 下午3:14:32 * @version 1.0 */ public class HttpConfig { private HttpConfig(){}; /** * 获取实例 * @retu

4、处理方法中获取请求参数、请求头、Cookie及原生的servlet API等

1.请求参数和请求头 使用@RequestParam绑定请求参数,在处理方法的入参处使用该注解可以把请求参数传递给请求方法 —— value :参数名 —— required : 是否必须,默认为true,表示请求参数中必须包含对应的参数,如果不存在,则抛出异常     例如: @RequestMapping(value="/param") public String testParam(@RequestParam(value="name", required=tr

轻松把玩HttpClient之封装HttpClient工具类(五),携带Cookie的请求

最近更新了一下HttpClientUtil工具类代码,主要是添加了一个参数HttpContext,这个是用来干嘛的呢?其实是用来保存和传递Cookie所需要的.因为我们有很多时候都需要登录,然后才能请求一些想要的数据.而在这以前使用HttpClientUtil工具类,还不能办到.现在更新了以后,终于可以了. 先说一下思路:本次的demo,就是获取csdn中的c币,要想获取c币,必须先登录.而每次登录需要5个参数.其中2个必不可少的参数是用户名和密码,其他的3个参数,是需要从登录页面获取的.在第一

HTTP请求封装Java工具类

package com.wiker;     import java.io.BufferedReader;  import java.io.ByteArrayOutputStream;  import java.io.IOException;  import java.io.InputStream;  import java.io.InputStreamReader;  import java.io.OutputStream;  import java.net.HttpURLConnection

java map接口,可变参数,Collections集合工具类

map接口的实现类存储成对的值,键--值.通过键来找到对应的值. Collection中的集合称为单列集合,Map中的集合称为双列集合 Map中常用的集合为HashMap集合.LinkedHashMap集合. HashMap<K,V>:存储数据采用的哈希表结构,元素的存取顺序不能保证一致.由于要保证键的唯一.不重复,需要重写键的hashCode()方法.equals()方法. LinkedHashMap<K,V>:HashMap下有个子类LinkedHashMap,存储数据采用的哈

Java基础知识回顾-22(静态导入,可变参数,Collections集合工具类,集合嵌套)

1.在导包的时候可以导入其静态部分,这样在类中使用其时,可以直接以其名使用 例如:Map.Entry的访问,在类文件头部导入import java.util.Map.Entry后简化后为Entry. 2.可以用"修饰符 返回值类型 方法名(参数类型... 形参名){  }"的方式来同时传入不确定个数,相同参数类型的参数.比如当求不确定个数的int类型的数据的和时,可以使用这种方式,避免写多个方法,如果参数类型不改变,则该方法不可重载,因为可变参数不确定参数个数吗.若要增加不可变参数,需

JAVAWEB开发之Struts2详解(二)——Action接受请求参数、类型转换器、使用Struts2的输入校验、以及遵守约定规则实现Struts2的零配置

Action接受请求参数 作为MVC框架,必须要负责解析HTTP请求参数,并将其封装到Model对象中 Struts2提供了非常强大的类型转换机制用于请求数据 到 model对象的封装 Struts2和MVC定义关系 StrutsPrepareAndExecuteFilter:控制器 在Struts2中action是什么?(Struts2是一个MVC框架) V:jsp M:action C:action StrutsPrepareAndExecuteFilter Struts2提供了三种数据封装

struts2 请求参数接收

1. 采用基本类型接受请求参数(get/post)在Action类中定义与请求参数同名的属性,struts2便能自动接收请求参数并赋予给同名的属性.请求路径:http://localhost:8080/action/register.action?id=33 public class HelloWorldAction { private Integer id; public Integer getId() { return id; } public void setId(Integer id)

servlet请求参数的编码处理

请求参数的编码处理基本上必须分post与get的情况来说明. 1.post请求参数的编码处理 如果客户端没有在Content-Type标头中设置字符编码信息(例如浏览器可以设置Content-Type:text/html;chartset=UTF-8),此时可以使用HttpServletRequest的getCharacterEncoding()返回值回事null.在这种情况下,容器默认的编码处理是ISO-8859-1.而客户端使用UTF-8发送非ASCII字符的请求参数,Servlet直接使用