web-dev-qa-db-fra.com

HTTPServletRequest getParameterMap () vs getParameterNames

HTTPServletRequest req, a une méthode getParameterMap() mais, les valeurs renvoient un String[] au lieu de String, pour publier les données comme

name = Marry & lastName = John & Age = 20.

Je vois dans les données de publication que ce n'est pas un tableau, mais getParameterMap() renvoie un tableau pour chaque clé (nom ou nom ou âge). Des conseils pour mieux comprendre cela?

Le code est disponible dans l'approche 2. L'approche 1 fonctionne parfaitement.

Approche 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 + ">");
}

Approche 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);
    }
}
12
NNikN

Si vous attendez des paramètres prédéterminés, vous pouvez utiliser la méthode getParameter(Java.lang.String name).

Sinon, les approches données ci-dessus peuvent être utilisées, mais avec quelques différences, dans la requête HTTP, quelqu'un peut envoyer un ou plusieurs paramètres avec le même nom .

Par exemple:

name=John, name=Joe, name=Mia

L'approche 1 ne peut être utilisée que si vous vous attendez à ce que le client envoie une seule valeur de paramètre pour un nom, les autres seront ignorés. Dans cet exemple, vous ne pouvez lire que "John"

L'approche 2 peut être utilisée si vous attendez plus d'une valeur portant le même nom. Les valeurs seront remplies sous forme de tableau comme vous l'avez montré dans le code. Par conséquent, vous pourrez lire toutes les valeurs, c'est-à-dire "John", "Joe", "Mia" dans cet exemple

Documentation

16
kamoor