Java 放入映射时出现非法状态异常

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

我不明白为什么我会得到臭名昭著的“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]);
        }
    }
}

有人能告诉我吗?

您提供了一张无法修改的地图。例如,该属性是不可变的。如果您无法控制所提供的映射,那么您需要创建一个新映射,将新项放在其中,返回并使用它

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
,如果查询字符串中恰好有一个参数没有
=