En otros ejemplos ya hemos visto como pasar parámetros a servicios RESTful en JAX-RS, ya sea en parámetros dentro de la URI o bien con parámetros como query. En este caso vamos a ver cómo podemos controlar una lista de parámetros en servicio RESTful JAX-RS, es decir, cómo pasar a un servicio RESTful una lista de valores.
Por ejemplo imaginemos que hemos creado un formulario y el usuario puede añadir una serie de items, los cuales se quieren pasar al servicio RESTful. Vamos a ver cómo podemos comunicarle esa lista de parámetros.
No vamos a entrar en detalle de cómo configurar tu entorno para poder crear servicios RESTful con JAX-RS. Pero si es la primera vez que te enfrentas a este tipo de ejemplos es «obligatorio» que te leas el artículo Servicios RESTful con Tomcat 7 y Jersey para saber cómo configurar tu entorno de ejecución.
Lo primero para realizar una clase que nos controle una lista de parámetros en servicio RESTful JAX-RS. Para convertir esta clase en un servicio RESTful utilizamos la anotación @Path
@Path("/lista")
public class ListaParametroQueryRest { ... }
Ahora creamos un método que atienda las peticiones de tipo GET, lo cual gestionamos mediante la anotación @Get
y que nos devuelva un contenido en HTML, para lo que utilizamos la anotación @Produces
@GET
@Produces("text/html")
public String getItems() {... }
Para la gestión de lista de parámetros en servicio RESTful JAX-RS vamos a apoyarnos en los parámetros por query, así que utilizaremos una anotación @QueryParam
. La estructura será:
/lista?item=valor1&item=valor2&item=valor3
Así el parámero que controlamos con @QueryParam
es item
, pero con una salvedad, que al ser N tendremos que indicar que es una lista. Así que la signatura de nuestro método nos quedará de la siguiente forma:
@GET
@Produces("text/html")
public String getItems(@QueryParam("item") List items) { ... }
Ya solo tendremos que recorrer los elementos de la lista para poder acceder a los valores. Para ello utilizamos un bucle for-each
.
@GET
@Produces("text/html")
public String getItems(@QueryParam("item") List items) {
StringBuffer sb = new StringBuffer();
sb.append("Lista de Items
Los items adquiridos son:
");
for (String item:items)
sb.append("- ").append(item).append("
");
sb.append("
");
return sb.toString();
}
De esta forma ya habremos conseguido tener una clase que gestione una lista de parámetros en servicio RESTful JAX-RS.