Передать массив в качестве параметра ресурсу JAX-RS - PullRequest
12 голосов
/ 30 марта 2011

У меня много параметров для передачи на сервер с использованием JAX-RS.

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

Ответы [ 2 ]

7 голосов
/ 31 марта 2011

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

Опция 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. Я не могу придумать вескую причину для использования XML-кода в URL-адресе, но мне было бы интересно узнать больше о том, что именно представляют собой эти данные.

1 голос
/ 31 декабря 2015

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

@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);
}
...