Почему значение параметра является хэш-кодом объекта для `request.getParameterMap (). Get (name)` - PullRequest
2 голосов
/ 22 сентября 2010

Почему значение параметра является хеш-кодом объекта:

input_name:[[Ljava.lang.String;@3f4d64]

Я думал, что код request.getParameterMap().get(name); выдаст значение параметра запроса:

    Enumeration params = request.getParameterNames();
    while(params.hasMoreElements())
    {
        String name = (String)params.nextElement(); 
        String value = request.getParameterMap().get(name);
        logger.log(name + ": " + value);
    }

Ответы [ 3 ]

9 голосов
/ 22 сентября 2010

Потому что он возвращает String[], а не String.Javadoc getParameterMap() также сообщает, что:

Возвращает:

неизменяемый java.util.Map, содержащий имена параметров в качестве ключей и значения параметров в виде картыценности.Ключи в карте параметров имеют тип String. Значения в карте параметров имеют тип String array.

Таким образом, вам нужно рассматривать его как массив.Если вы хотите получить одно (первое) значение параметра, используйте request.getParameter().Вот переписывание:

for (String name : Collections.<String>list(request.getParameterNames())) {
    String value = request.getParameter(name); 
    logger.log(name + ": " + value);
}

Или, если вы действительно хотите проверить все возможные значения параметров, просто выполните итерацию по набору записей карты:

Map<String, String[]> map = request.getParameterMap();
for (Entry<String, String[]> entry : map.entrySet()) {
    String name = entry.getKey();
    String[] values = entry.getValue();
    logger.log(name + ": " + Arrays.toString(values));
}
4 голосов
/ 22 сентября 2010

Карта параметров - это карта от имен параметров до массивов значений.Это потому, что у вас может быть несколько значений для одного и того же параметра.Рассмотрим, например, следующий запрос:

<a href="http://www.example.com/var=" rel="nofollow noreferrer">http://www.example.com/var=</a><strong>value1</strong>&var=<strong>value2</strong>

В этом случае вы получите { "value1", "value2" } при получении параметров для var.

Если вы хотитевывести все значения для данного параметра, вы можете использовать Arrays.toString в массиве значений.

Если вы знаете, что каждая переменная имеет не более одного значения, вы можете использовать getParameter.Из документов:

Этот метод следует использовать только в том случае, если вы уверены, что параметр имеет только одно значение.Если параметр может иметь более одного значения, используйте getParameterValues ​​(java.lang.String).

1 голос
/ 22 сентября 2010

Причина, по которой HttpServletRequest имеет

Map<String, String[]> map = request.getParameterMap();

, заключается в том, что форма Submit имеет те же имена параметров, но разные значения.По существу, вы можете иметь форму URL с 1 или более одинаковыми именами параметров с разными значениями.

См. BalusC ответ.

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