web-dev-qa-db-ja.com

HTTP Getを使用して配列を送信する

HTTP Getリクエストで配列を送信するにはどうすればよいですか?

GWTクライアントを使用してリクエストを送信しています。

82
Matteo

これは、ターゲットサーバーが何を受け入れるかに依存します。これに関する決定的な標準はありません。 a.oも参照してください。 Wikipedia:クエリ文字列

明確な標準はありませんが、ほとんどのWebフレームワークでは、複数の値を単一のフィールドに関連付けることができます(例:_field1=value1&field1=value2&field2=value3_)。[4][5]

一般に、ターゲットサーバーがJava( Servlet )などのstrong typedプログラミング言語を使用する場合、 APIは通常、複数のパラメーター値を配列として取得するための専用メソッドを提供します。

_foo=value1&foo=value2&foo=value3
_
_String[] foo = request.getParameterValues("foo"); // [value1, value2, value3]
_

request.getParameter("foo")も機能しますが、最初の値のみを返します。

_String foo = request.getParameter("foo"); // value1
_

そして、ターゲットサーバーがPHPまたはRoRのようなweak typed言語を使用する場合、パラメーター名の末尾に中括弧_[]_言語をトリガーして、単一の値ではなく値の配列を返すようにします。

_foo[]=value1&foo[]=value2&foo[]=value3
_
_$foo = $_GET["foo"]; // [value1, value2, value3]
echo is_array($foo); // true
_

まだ_foo=value1&foo=value2&foo=value3_を使用している場合、最初の値のみを返します。

_$foo = $_GET["foo"]; // value1
echo is_array($foo); // false
_

_foo[]=value1&foo[]=value2&foo[]=value3_をJavaサーブレットに送信する場合、それらは引き続き取得できますが、中括弧を含む正確なパラメーター名を使用する必要があることに注意してください。

_String[] foo = request.getParameterValues("foo[]"); // [value1, value2, value3]
_
139
BalusC

私はこの投稿が本当に古いことを知っていますが、BalusCの答えは正しいとマークされていますが、完全に正しいわけではないため、返信する必要があります。

次のように、fooに「[]」を追加するクエリを作成する必要があります。

foo[]=val1&foo[]=val2&foo[]=val3
173
David Roman