lunes, 16 de marzo de 2009

REST Web Services con Jersey (II)

Seguimos donde los dejamos :-) En JAX-RS, podemos obtener distintas representaciones para la misma información, lo que se llama "content-negotiation". En las cabeceras de la petición mandada por el cliente, se incluye la cabecera "Accept" que indica los tipos MIME soportados/preferidos por el cliente y, en base a eso, generar una respuesta adecuada e indicándola en la cabecera "Content-Type".

La anotación @Produces permite especificar el tipo MIME que es capaz de generar un método.

package com.domborjo.rest;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;

@Path("/holaMundo")
public class HolaMundo {

@GET
@Produces("text/plain")
public String sayHola() {
return "Hola Mundo!";
}

@GET
@Produces("application/xml")
public String sayHolaXml() {
return "Hola Mundo!";
}
}

Para comprobar que funciona correctamente, Jersey proporciona una API para desarrollar clientes

package com.domborjo.client;

import static java.lang.System.out;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;
public class JerseyClient {
public static void main(String[] args) {
Client client = Client.create();
WebResource holaResource = client.resource(
"http://localhost:8080/RestTest/resources/holaMundo");

out.println(holaResource.accept("text/plain").get(String.class));
out.println(holaResource.accept("application/xml").get(String.class));
out.println(holaResource.accept("text/plain",
"application/xml").get(String.class));
}
}

El código es bastante simple. El método accept() permite especificar los tipos MIME aceptados por el cliente (admite varios tipos ya que el parámetro es un vararg. Por defecto "text/plain"). El método get()
invoca la llamada GET y el parámetro es el tipo de la respuesta.

El resultado obtenido es:

Hola Mundo!
<datos>Hola Mundo!</datos>
Hola Mundo!

Nos vemos en el siguiente post!

No hay comentarios: