Estoy creando un cliente de Jersey para un servicio GET que tiene una lista como parámetro de consulta. De acuerdo con la documentación , es posible tener una Lista como parámetro de consulta (esta información también se encuentra en @QueryParam javadoc), compruébalo:
En general, el tipo de Java del parámetro de método puede:
- Sea un tipo primitivo;
- Tener un constructor que acepte un solo argumento de cadena;
- Tener un método estático llamado valueOf o fromString que acepte un solo argumento String (ver, por ejemplo, Integer.valueOf (String) y java.util.UUID.fromString (String)); o
- Sea List, Set o SortedSet, donde T satisface 2 o 3 arriba. La colección resultante es de solo lectura.
A veces, los parámetros pueden contener más de un valor para el mismo nombre. Si este es el caso, se pueden usar los tipos 4) para obtener todos los valores.
Sin embargo, no puedo averiguar cómo agregar un parámetro de consulta List usando el cliente Jersey.
Entiendo que las soluciones alternativas son:
- Utilice POST en lugar de GET;
- Transforma la lista en una cadena JSON y pásala al servicio.
El primero no es bueno, porque el verbo HTTP adecuado para el servicio es GET. Es una operación de recuperación de datos.
La segunda será mi opción si no puedes ayudarme. :)
También estoy desarrollando el servicio, por lo que puedo cambiarlo según sea necesario.
¡Gracias!
Actualizar
Código de cliente (usando 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>() {});