Я створюю клієнт Джерсі для служби GET, що має параметр "Список" як запит. Згідно з документацією , можна мати List як параметр запиту (ця інформація також знаходиться на @QueryParam javadoc), перевірте це:
Загалом тип Java параметра параметра може:
- Бути примітивним типом;
- Мати конструктор, який приймає один аргумент String;
- Мати статичний метод з іменем valueOf або fromString, який приймає один аргумент String (див., Наприклад, Integer.valueOf (String) та java.util.UUID.fromString (String)); або
- Будьте списком, встановіть або відсортуйте, де T відповідає 2 або 3 вище. Отримана колекція доступна лише для читання.
Іноді параметри можуть містити більше одного значення для одного і того ж імені. Якщо це так, тоді типи 4) можуть бути використані для отримання всіх значень.
Однак я не можу зрозуміти, як додати параметр запиту List, використовуючи клієнт Джерсі.
Я розумію, що альтернативними рішеннями є:
- Використовуйте 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>() {});