Передайте массив как параметр ресурсу JAX-RS

У меня есть много параметров, которые можно передать на сервер с помощью JAX-RS.

Есть ли способ передать или AarryList с URL?

Ответ 1

У вас есть несколько вариантов.

Вариант 1: параметр запроса с несколькими значениями

Вы можете предоставить несколько простых значений для одного параметра запроса. Например, строка запроса может выглядеть так:

PUT /path/to/my/resource?param1=value1&param1=value2&param1=value3

Здесь параметр запроса param1 имеет три значения, и контейнер предоставит вам доступ ко всем трем значениям в виде массива (см. Строка строки запроса).

Вариант 2: предоставить комплексные данные в корпусе PUT

Если вам нужно отправить сложные данные в запрос PUT, это обычно делается, поставляя этот контент в тело запроса. Конечно, эта полезная нагрузка может быть xml (и связана через JAXB).


Помните, что точкой URI является идентификация ресурса (RFC 3986, 3.4), и если этот массив значений - это данные, которые необходим для идентификации ресурса, тогда URI является хорошим местом для этого. Если, с другой стороны, этот массив данных является частью нового представления, которое отправляется в этом запросе PUT, то оно принадлежит к телу запроса.

Сказав это, если вам действительно не нужен массив простых значений, я бы рекомендовал выбрать вариант 2. Я не могу придумать вескую причину использования URL-кодированного XML в URL-адресе, d быть заинтересованным узнать больше о том, что именно эти данные.

Ответ 2

Мы можем получить параметры запроса и соответствующие значения в виде Карты,

@GET
@Produces(MediaType.APPLICATION_JSON)
public void test(@Context UriInfo ui) {
    MultivaluedMap<String, String> map = ui.getQueryParameters();
    String name = map.getFirst("name");
    String age = map.getFirst("age");
    System.out.println(name);
    System.out.println(age);
}