Je suis en train de créer un client Jersey pour un service GET qui a une liste comme paramètre de requête. D'après le documentation il est possible d'avoir une liste comme paramètre de requête (cette information est également disponible à l'adresse suivante @QueryParam javadoc), consultez-le :
En général, le type Java du paramètre de la méthode peut :
- Soyez un type primitif ;
- Avoir un constructeur qui accepte un seul argument de type String ;
- avoir une méthode statique nommée valueOf ou fromString qui accepte un seul argument de type String (voir, par exemple, Integer.valueOf(String) et java.util.UUID.fromString(String)) ; ou
- Être une liste, un ensemble ou un ensemble trié, où T satisfait aux critères 2 ou 3 ci-dessus. La collection résultante est en lecture seule.
Parfois, les paramètres peuvent contenir plus d'une valeur pour le même nom. Si c'est le cas, les types indiqués en 4) peuvent être utilisés pour obtenir toutes les valeurs.
Cependant, je n'arrive pas à trouver comment ajouter un paramètre de requête de type liste en utilisant le client Jersey.
Je comprends que des solutions alternatives existent :
- Utilisez POST au lieu de GET ;
- Transformer la liste en une chaîne JSON et la transmettre au service.
La première n'est pas bonne, car le verbe HTTP approprié pour le service est GET. Il s'agit d'une opération de récupération de données.
La seconde sera mon option si vous ne pouvez pas m'aider. :)
Je suis également en train de développer le service, donc je peux le modifier si nécessaire.
Merci !
Mise à jour
Code client (utilisant 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>() {});