6

次のようなGETリクエストをサーバーに渡すことができるようにしたい:

 http://example.com/?a[foo]=1&a[bar]=15&b=3

そして、クエリ パラメータ 'a' を取得すると、次のように HashMap として解析する必要があります。

{'foo':1, 'bar':15}

編集:わかりました、明確にするために、これが私がやろうとしていることですが、PHPではなくJavaで:

HTTP GET 経由でキーを含む配列を渡す

これを達成する方法はありますか?

4

3 に答える 3

1

URL に追加することで、JSON オブジェクトを文字列として渡すことができます。ただし、エンコードする必要がある前に、このリンク http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_classes_restful_encodingUtil.htm で指定された方法を使用してエンコードし、json オブジェクトを次のように追加します。その他の文字列

于 2013-03-18T09:29:51.333 に答える
1

これを行う標準的な方法はありません。

ウィンク対応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);
}
于 2013-03-05T07:23:58.770 に答える
0

または、HttpServletRequestを使用している場合は、getParameterMap()メソッドを使用して、すべてのパラメーターとその値をマップとして提供できます。

例えば

public void doGet(HttpServletRequest request, HttpServletResponse response)
              throws IOException {

   System.out.println("Parameters : \n"+request.getParameterMap()+"\n End");

}
于 2013-03-18T09:53:44.883 に答える