Как получить параметр запроса в виде HashMap

Я хочу иметь возможность передать на мой сервер запрос GET, например:

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

И когда я получаю параметр запроса 'a', он должен быть проанализирован как HashMap следующим образом:

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

РЕДАКТИРОВАТЬ: Хорошо, чтобы было ясно, вот что я пытаюсь сделать, но в Java, а не PHP:

Передать массив с ключами через HTTP GET

Есть идеи как это сделать?

3 ответа

Нет стандартного способа сделать это.

Wink поддерживает 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);
}

Вы можете передать JSON Object как String, добавив его в URL. Но прежде чем вам нужно его кодировать, вы можете использовать метод, указанный в этой ссылке http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_classes_restful_encodingUtil.htm для кодирования, а затем просто добавить объект json как любая другая строка

В качестве альтернативы, если вы используете HttpServletRequest, вы можете использовать метод getParameterMap(), который выдает все параметры и их значения в виде карты.

например

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

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

}
Другие вопросы по тегам