Java 放入映射时出现非法状态异常
我不明白为什么我会得到臭名昭著的“IllegalStateException”,其中包含以下代码:Java 放入映射时出现非法状态异常,java,exception,illegalstateexception,Java,Exception,Illegalstateexception,我不明白为什么我会得到臭名昭著的“IllegalStateException”,其中包含以下代码: private void mergeQueryStrings(String url, Map parameterMap) { String queryString = getQueryString(url); if(queryString!=null){ String [] params = queryString.split("&"); f
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]);
}
}
}
有人能告诉我吗?您提供了一张无法修改的地图。例如,该属性是不可变的。如果您无法控制所提供的映射,那么您需要创建一个新映射,将新项放在其中,返回并使用它
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
替换原来的参数映射。但这是一个完全不同的故事:)
与具体问题无关在将字符串部分放入新地图之前,您应该先查询它们。乍一看,我看不出任何错误。这个异常是在哪一行抛出的?没有什么明显的,但是您有很多信息没有共享。生成异常的是哪一行?异常的消息是什么?url
的哪个值导致异常发生?什么Map
实现被传递到方法中?+1还有一件事需要注意:param.split(“=”[1]
可以抛出ArrayIndexOutOfBoundsException
,如果查询字符串中恰好有一个参数没有=
。