java - 放入 Map 时出现非法状态异常

标签 java exception illegalstateexception

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

谁能帮我解答一下吗?

最佳答案

您提供了不可修改的 map 。例如, ServletRequest#getParameterMap() 是不可变的。如果您无法控制提供的 map ,那么您需要创建一个新 map ,将新项目放入其中,返回并使用它。

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 的帮助下替换原始参数映射。在 Filter 。但这是一个完全不同的故事:)

<小时/>

与具体问题无关,您应该 url-decode查询字符串部分,然后将它们放入新 map 中。

关于java - 放入 Map 时出现非法状态异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5720536/

相关文章:

java - 如何在java中使用getX或getY方法?

java - 我在 Android 中遇到了 null 异常,我找不到位置,最糟糕的是 - 为什么?

java - 使用 java 9 编译 lambda 表达式时 Maven 构建失败

java - 是什么导致了 java.lang.ArrayIndexOutOfBoundsException 以及如何防止它?

java - 如何通过单击单元格表中的单元格来打开弹出面板?

未从共享库捕获 android 异常

python - 如何在 python 中的一个 block 中编写多个 try 语句?

android - IllegalStateException when .replace fragment on restart

java - 关闭对话框后再次打开对话框时应用程序崩溃,给出 'java.lang.IllegalStateException'

android - Helper 类 - 错误无法启动 Activity ComponentInfo :