Java – Jersey JAXB vs Jackson

febrero 13, 2011

Estoy iniciando un proyecto en el que utilizo Jersey (JAX-RS) para crear los servicios REST que utilizará la aplicación. Inicialmente pensé en anotar mis entidades (clases POJO) con el atributo @XmlRootElement de JAXB, de esta forma podría regresar directamente mis objetos y Jersey se encargaría de la serialización al formato JSON(mediante Jackson). De tal forma que el método GET quedaría de la siguiente forma:

@GET
@Produces("application/json")
public List<Vehicle> retrieve(){
 DAO store=new DAO();
 return store.ofy().query(Service.class).list();
}

Elegante y sencillo (gracias a Objectify, que se encarga del acceso a datos en el AppEngine Datastore). El principal problema es que no tenemos control sobre el proceso de serialización, así que, si mas adelante queremos -por ejemplo- implementar la páginación de datos, será un proceso un poco más complicado.
Entonces ¿cómo retomamos el control sobre el proceso de serialización? Pues una opción es utilizar directamente Jackson, de está forma podremos -más adelante- agregar metadatos o cualquier cosa que necesitemos a nuestra respuesta JSON.

Así, nuestro método quedaría de la siguiente forma:

@GET
@Produces("application/json")
public String retrieve(){
 try{
 DAO store=new DAO();
 List<Vehicle> vehicles=store.ofy().query(Vehicle.class).list();
 ObjectMapper mapper=new ObjectMapper();
 Map<String,Object> jsonMap=new HashMap<String, Object>();
 jsonMap.put("vehicles", vehicles);
 return mapper.writeValueAsString(jsonMap);
 }catch(Exception e){
 e.printStackTrace();
 throw new WebApplicationException(Status.INTERNAL_SERVER_ERROR);
 }
}

Si quisieramos agregar otra propiedad en la respuesta, además de los vehículos, lo haríamos simplemente agregandola a nuestro “mapa”:

jsonMap.put(“total”,vehicles.size());

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: