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);
}
}
Ответы
Ответ 1
Если вы ожидаете предварительно определенные параметры, вы можете использовать getParameter(java.lang.String name)
.
В противном случае могут быть использованы подходы, приведенные выше, но с некоторыми отличиями, в HTTP-запросе кто-то может отправить один или несколько параметров с одинаковым именем.
Например:
name=John, name=Joe, name=Mia
Подход 1 можно использовать только в том случае, если вы ожидаете, что клиент отправит только одно значение параметра для имени, остальные из них будут игнорироваться. В этом примере вы можете читать только "Джон"
Подход 2 можно использовать, если вы ожидаете более одного значения с одинаковым именем. Значения будут заполнены в виде массива, как показано в коде. Следовательно, вы сможете прочитать все значения, например, "Джон", "Джо", "Миа" в этом примере.
Документация