我不明白为什么我用以下代码得到臭名昭着的“IllegalStateException”:
private void mergeQueryStrings(String url, Map parameterMap) {
String queryString = getQueryString(url);
if(queryString!=null){
String [] params = queryString.split("&");
for(String param:params){
parameterMap.put(param.split("=")[0], param.split("=")[1]);
}
}
}
有人能开导我吗?
答案 0 :(得分:7)
您提供了一张不可修改的地图。例如,ServletRequest#getParameterMap()
是不可变的。如果您无法控制提供的地图,那么您需要创建一个新地图,将新项目放在那里,然后将其返回并使用它。
private Map mergeQueryStrings(String url, Map parameterMap) {
Map newParameterMap = new HashMap(parameterMap);
String queryString = getQueryString(url);
if(queryString!=null){
String [] params = queryString.split("&");
for(String param:params){
newParameterMap.put(param.split("=")[0], param.split("=")[1]);
}
}
return newParameterMap;
}
如果您实际使用servlet请求参数映射,那么您希望在HttpServletRequestWrapper
的{{1}}的帮助下替换原始的。但那是一个完全不同的故事:)
无关,在将查询字符串部分放入新地图之前,您应该url-decode。