Ich erstelle einen Jersey-Client für einen GET-Dienst, der eine Liste als Abfrageparameter enthält. Laut Dokumentation ist es möglich, eine Liste als Abfrageparameter zu haben (diese Informationen finden Sie auch unter @QueryParam javadoc). Schauen Sie sich das an:
Im Allgemeinen kann der Java-Typ des Methodenparameters:
- Sei ein primitiver Typ;
- Haben Sie einen Konstruktor, der ein einzelnes String-Argument akzeptiert;
- Haben Sie eine statische Methode namens valueOf oder fromString, die ein einzelnes String-Argument akzeptiert (siehe z. B. Integer.valueOf (String) und java.util.UUID.fromString (String)); oder
- Sei List, Set oder SortedSet, wobei T 2 oder 3 oben erfüllt. Die resultierende Sammlung ist schreibgeschützt.
Manchmal können Parameter mehr als einen Wert für denselben Namen enthalten. Wenn dies der Fall ist, können die Typen 4) verwendet werden, um alle Werte zu erhalten.
Ich kann jedoch nicht herausfinden, wie ein Listenabfrageparameter mit dem Jersey-Client hinzugefügt wird.
Ich verstehe, dass alternative Lösungen sind:
- Verwenden Sie POST anstelle von GET.
- Transformieren Sie die Liste in eine JSON-Zeichenfolge und übergeben Sie sie an den Dienst.
Das erste ist nicht gut, weil das richtige HTTP-Verb für den Dienst GET ist. Es ist eine Datenabrufoperation.
Der zweite ist meine Option, wenn Sie mir nicht helfen können. :) :)
Ich entwickle den Service auch, damit ich ihn nach Bedarf ändern kann.
Vielen Dank!
Aktualisieren
Client-Code (mit 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>() {});