Tworzę klienta Jersey dla usługi GET, która ma listę jako parametr zapytania. Zgodnie z dokumentacją możliwe jest posiadanie listy jako parametru zapytania (ta informacja jest również w @QueryParam javadoc), sprawdź to:
Ogólnie rzecz biorąc, typ Java parametru metody może:
- Bądź typem prymitywnym;
- Mieć konstruktora, który akceptuje pojedynczy argument typu String;
- Mieć statyczną metodę o nazwie valueOf lub fromString, która akceptuje pojedynczy argument typu String (patrz, na przykład, Integer.valueOf (String) i java.util.UUID.fromString (String)); lub
- Be List, Set lub SortedSet, gdzie T spełnia 2 lub 3 powyżej. Otrzymana kolekcja jest tylko do odczytu.
Czasami parametry mogą zawierać więcej niż jedną wartość dla tej samej nazwy. W takim przypadku można użyć typów 4) w celu uzyskania wszystkich wartości.
Jednak nie mogę dowiedzieć się, jak dodać parametr zapytania List przy użyciu klienta Jersey.
Rozumiem, że alternatywne rozwiązania to:
- Użyj POST zamiast GET;
- Przekształć listę w ciąg JSON i przekaż ją do usługi.
Pierwsza nie jest dobra, ponieważ właściwy czasownik HTTP dla usługi to GET. Jest to operacja odzyskiwania danych.
Druga będzie moją opcją, jeśli nie możesz mi pomóc. :)
Rozwijam też usługę, więc w razie potrzeby mogę ją zmienić.
Dzięki!
Aktualizacja
Kod klienta (przy użyciu 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>() {});