web-dev-qa-db-ja.com

HTTPServletRequest getParameterMap()とgetParameterNames

HTTPServletRequest req、メソッドgetParameterMap()がありますが、値はStringではなく_String[]_を返します。

name = 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);
    }
}
_
12
NNikN

事前に決定されたパラメータが必要な場合は、getParameter(Java.lang.String name)メソッドを使用できます。

それ以外の場合は、上記のアプローチを使用できますが、いくつかの違いはありますが、HTTPリクエストでは、誰かがsameという名前の1つ以上のパラメータを送信できます。

例えば:

name=John, name=Joe, name=Mia

アプローチ1は、クライアントが名前のパラメーター値を1つだけ送信すると予想される場合にのみ使用でき、残りのパラメーターは無視されます。この例では、「John」のみを読み取ることができます

同じ名前の値が複数あることが予想される場合は、アプローチ2を使用できます。コードで示したように、値は配列として入力されます。したがって、この例では「John」、「Joe」、「Mia」などのすべての値を読み取ることができます。

ドキュメント

16
kamoor