次のようなGETリクエストをサーバーに渡すことができるようにしたい:
http://example.com/?a[foo]=1&a[bar]=15&b=3
そして、クエリ パラメータ 'a' を取得すると、次のように HashMap として解析する必要があります。
{'foo':1, 'bar':15}
編集:わかりました、明確にするために、これが私がやろうとしていることですが、PHPではなくJavaで:
これを達成する方法はありますか?
次のようなGETリクエストをサーバーに渡すことができるようにしたい:
http://example.com/?a[foo]=1&a[bar]=15&b=3
そして、クエリ パラメータ 'a' を取得すると、次のように HashMap として解析する必要があります。
{'foo':1, 'bar':15}
編集:わかりました、明確にするために、これが私がやろうとしていることですが、PHPではなくJavaで:
これを達成する方法はありますか?
URL に追加することで、JSON オブジェクトを文字列として渡すことができます。ただし、エンコードする必要がある前に、このリンク http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_classes_restful_encodingUtil.htm で指定された方法を使用してエンコードし、json オブジェクトを次のように追加します。その他の文字列
これを行う標準的な方法はありません。
ウィンク対応javax.ws.rs.core.MultivaluedMap
。したがって、次のようなものを送信すると、http://example.com/?a=1&a=15&b=3
キーa
値 1、15 が返されます。キーb
値 3。
次のようなものを解析する必要がある場合は、キーを取得して追加の解析を実行する?a[1]=1&a[gv]=15&b=3
必要があります。javax.ws.rs.core.MultivaluedMap.entrySet()
使用できるコードの例を次に示します (テストしていないため、小さなエラーが含まれている可能性があります)。
String getArrayParameter(String key, String index, MultivaluedMap<String, String> queryParameters) {
for (Entry<String, List<String>> entry : queryParameters.entrySet()) {
String qKey = entry.getKey();
int a = qKey.indexOf('[');
if (a < 0) {
// not an array parameter
continue;
}
int b = qKey.indexOf(']');
if (b <= a) {
// not an array parameter
continue;
}
if (qKey.substring(0, a).equals(key)) {
if (qKey.substring(a + 1, b).equals(index)) {
return entry.getValue().get(0);
}
}
}
return null;
}
リソースでは、次のように呼び出す必要があります。
@GET
public void getResource(@Context UriInfo uriInfo) {
MultivaluedMap<String, String> queryParameters = uriInfo.getQueryParameters();
getArrayParameter("a", "foo", queryParameters);
}
または、HttpServletRequestを使用している場合は、getParameterMap()メソッドを使用して、すべてのパラメーターとその値をマップとして提供できます。
例えば
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException {
System.out.println("Parameters : \n"+request.getParameterMap()+"\n End");
}