我想在我的自定义地图中使用我的请求参数地图,例如
Map<String, String> reqMap =(HashMap<String, String>)request.getParameterMap();
上述声明给出了以下异常
java.lang.ClassCastException: java.util.Collections$UnmodifiableMap
任何人都可以指导我如何在自定义地图中获取所有请求参数? 不想写for循环来逐个获取参数,这会导致我出现性能问题。
答案 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();