Подтвердить что ты не робот

HTTPServletRequest getParameterMap() vs getParameterNames

HTTPServletRequest req, имеет метод getParameterMap() но значения возвращают String[] вместо String, для данных публикации как

Имя = Marry & LastName = John & Age = 20.

Я вижу в данных поста это не массив, но getParameterMap() возвращает массив для каждого ключа (name или lastName или Age). Любые указатели на понимание этого в лучшем виде?

Код доступен в подходе 2. Подход 1 работает совершенно нормально.

Подход 1:

Enumeration<String> parameterNames = req.getParameterNames();

while (parameterNames.hasMoreElements()) {
    String key = (String) parameterNames.nextElement();
    String val = req.getParameter(key);
    System.out.println("A= <" + key + "> Value<" + val + ">");
}

Подход 2:

Map<String, Object> allMap = req.getParameterMap();

for (String key : allMap.keySet()) {
    String[] strArr = (String[]) allMap.get(key);
    for (String val : strArr) {
        System.out.println("Str Array= " + val);
    }
}
4b9b3361

Ответ 1

Если вы ожидаете предварительно определенные параметры, вы можете использовать getParameter(java.lang.String name).

В противном случае могут быть использованы подходы, приведенные выше, но с некоторыми отличиями, в HTTP-запросе кто-то может отправить один или несколько параметров с одинаковым именем.

Например:

name=John, name=Joe, name=Mia

Подход 1 можно использовать только в том случае, если вы ожидаете, что клиент отправит только одно значение параметра для имени, остальные из них будут игнорироваться. В этом примере вы можете читать только "Джон"

Подход 2 можно использовать, если вы ожидаете более одного значения с одинаковым именем. Значения будут заполнены в виде массива, как показано в коде. Следовательно, вы сможете прочитать все значения, например, "Джон", "Джо", "Миа" в этом примере.

Документация