Я создаю клиент Джерси для службы GET, у которой есть параметр List as query. Согласно documentation, возможно иметь список как параметр запроса (эта информация также находится в @QueryParam javadoc), проверьте:
В общем, тип Java параметра метода может:
- Будьте примитивным типом;
- У конструктора, который принимает один аргумент String,
- Имейте статический метод с именем valueOf или fromString, который принимает единственный аргумент String (см., например, Integer.valueOf(String) и java.util.UUID.fromString(String)); или
- Список, Set или SortedSet, где T удовлетворяет 2 или 3 выше. Полученная коллекция доступна только для чтения.
Иногда параметры могут содержать более одного значения для одного и того же имени. Если это так, то типы в 4) могут использоваться для получения всех значений.
Тем не менее, я не могу понять, как добавить параметр запроса List с помощью клиента Jersey.
Я понимаю альтернативные решения:
- Используйте POST вместо GET;
- Преобразовать список в строку JSON и передать его службе.
Первый из них не очень хорош, потому что надлежащим HTTP-глаголом для службы является GET. Это операция поиска данных.
Второй вариант будет моим вариантом, если вы не сможете мне помочь.:)
Я также разрабатываю услугу, поэтому я могу ее изменить по мере необходимости.
Спасибо!
Обновление
Клиентский код (с помощью json)
Client client = Client.create();
WebResource webResource = client.resource(uri.toString());
SearchWrapper sw = new SearchWrapper(termo, pagina, ordenacao, hits, SEARCH_VIEW, navegadores);
MultivaluedMap<String, String> params = new MultivaluedMapImpl();
params.add("user", user.toUpperCase());
params.add("searchWrapperAsJSON", (new Gson()).toJson(sw));
ClientResponse clientResponse = webResource .path("/listar")
.queryParams(params)
.header(HttpHeaders.AUTHORIZATION, AuthenticationHelper.getBasicAuthHeader())
.get(ClientResponse.class);
SearchResultWrapper busca = clientResponse.getEntity(new GenericType<SearchResultWrapper>() {});