Как получить параметр запроса в виде 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");
}