在Customiz地图中获取请求参数地图?

时间:2012-06-27 14:47:06

标签: java collections

我想在我的自定义地图中使用我的请求参数地图,例如

Map<String, String> reqMap =(HashMap<String, String>)request.getParameterMap();

上述声明给出了以下异常

java.lang.ClassCastException: java.util.Collections$UnmodifiableMap

任何人都可以指导我如何在自定义地图中获取所有请求参数? 不想写for循环来逐个获取参数,这会导致我出现性能问题。

4 个答案:

答案 0 :(得分:4)

谨防将地图投射到String, String,因为request.getParameterMap()从Java 6开始返回String, String[]类型的地图。 http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html#getParameterMap()

答案 1 :(得分:2)

Map<String, String> reqMap = request.getParameterMap();
CustomMap<String, String> customMap = new CustomMap<String,String>();
customMap.putAll(reqMap);

当然,您可能需要遍历putAll()实现中的地图元素。否则就不可能。

<强>更新 刚刚看到你的评论,泰语很简单,

Map<String, String> reqMap = request.getParameterMap();
Map<String, String> newMap= new HashMap<String,String>();
newMap.putAll(reqMap);

或者,您甚至可以将reqMap作为构造函数参数传递给new HashMap<String, String>(reqMap);

答案 2 :(得分:0)

您可以尝试以下方法:

public LinkedHashMap<String, String> returnMapOfRequest(HttpServletRequest request) 
    {
        LinkedHashMap<String, String> map = new LinkedHashMap<String, String>();
        try 
        {
            Enumeration<String> parameterNames = request.getParameterNames();
            Enumeration<String> headerNames = request.getHeaderNames();
            while(headerNames.hasMoreElements()) 
            {
                String headerName = headerNames.nextElement();
                Enumeration<String> headers = request.getHeaders(headerName);
                while(headers.hasMoreElements())
                {
                    String headerValue = headers.nextElement();
                    map.put(headerName, headerValue);
                }
            }
            HttpSession session = request.getSession();
            Enumeration e = session.getAttributeNames();
            while(e.hasMoreElements())
            {
                String key = (String) e.nextElement();
                map.put(key, session.getAttribute(key));
            }
            while(parameterNames.hasMoreElements())
            {
                String paramName = parameterNames.nextElement();
                String[] paramValues = request.getParameterValues(paramName);
                for(int i = 0; i < paramValues.length; i++) 
                {
                    String paramValue = paramValues[i];
                    map.put(paramName, paramValue);
                }
            }
        }
        catch(Exception e)
        {
            logger.error("Exception in returnMapOfRequest  ::  ", e);
        }
        return map;
    }

答案 3 :(得分:-1)

变化:

Map<String, String> reqMap =(HashMap<String, String>)request.getParameterMap();

要:

Map<String, String> reqMap =(Map<String, String>)request.getParameterMap();