Исключение из незаконного состояния при добавлении карты - PullRequest
2 голосов
/ 19 апреля 2011

Я не понимаю, почему я получаю печально известную исключительную ситуацию 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]);
        }
    }
}

Может ли кто-нибудь просветить меня?

1 Ответ

7 голосов
/ 19 апреля 2011

Вы предоставили неизменяемую карту.Например, 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;
}

Если вы были на самом деле , используя для этого карту параметров запроса сервлета, затем вы хотели бы заменить исходную с помощью HttpServletRequestWrapper в Filter.Но это совсем другая история:)


Не связанная с конкретной проблемой, вы должны url-декодировать части строки запроса, прежде чем помещать их в новыйкарта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...