我们知道,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对象的属性进行自动匹配(此时,推荐使用第一个方法)。