martes, 16 de octubre de 2012


Arquitectura GSON
 

GSON es una pequeña biblioteca de código abierto para el lenguaje java que nos permite convertir una clase java en un String con formato JSON y viceversa, mediante la serialización y deserialización entre objetos Java y su representación en notación JSON, simplemente invocando los métodos toJson() o fromJson().
Es útil si hacemos una aplicación web con java en el lado del servidor y usamos el formato JSON para enviar y recibir datos al navegador, ya que permite la representación personalizada de objetos y provee soporte para tipos genéricos de Java.

 
 
En el pom.xml se agregan las dependencias para descargar las librerías del repositorio Maven que son necesarias para activar el Gson.
            <dependency>
                        <groupId>com.google.code.gson</groupId>
                        <artifactId>gson</artifactId>
                        <version>1.7.1</version>
            </dependency> 
Se crean los objetos POJO Recibos, Documentos y DetRecibo que son la clase encargadas de almacenar los resultados del servicio, requeridos para que luego, utilizando atributos de la librería Gson, se logre indicar las dependencias con las propiedades JSON devueltas por el servicio web en RESTful, de este modo es posible convertir cadenas JSON formateado al tipo de objetos JAVA.
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "recibos")
public class Recibos {
            private Integer doccod;
            private Integer docrecitm;
 
            public Integer getDoccod() {
                        return doccod;
            }
            public void setDoccod(Integer doccod) {
                        this.doccod = doccod;
            }
            public Integer getDocrecitm() {
                        return docrecitm;
            }
            public void setDocrecitm(Integer docrecitm) {
                        this.docrecitm = docrecitm;
            }
}
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "documentos")
public class Documentos {
            private Integer doccod;
            private Integer docanonum;
            private Integer doccor;
            private String tpodoccod;
 
            public Integer getDoccod() {
                        return doccod;
            }
            public void setDoccod(Integer doccod) {
                        this.doccod = doccod;
            }
            public Integer getDocanonum() {
                        return docanonum;
            }
            public void setDocanonum(Integer docanonum) {
                        this.docanonum = docanonum;
            }
            public Integer getDoccor() {
                        return doccor;
            }
            public void setDoccor(Integer doccor) {
                        this.doccor = doccor;
            }
            public String getTpodoccod() {
                        return tpodoccod;
            }
            public void setTpodoccod(String tpodoccod) {
                        this.tpodoccod = tpodoccod;
            }
}
public class DetRecibo {
            private Integer doccod;
            private String concepto;
            private Double importe;
 
            public Integer getDoccod() {
                        return doccod;
            }
            public void setDoccod(Integer doccod) {
                        this.doccod = doccod;
            }
            public String getConcepto() {
                        return concepto;
            }
            public void setConcepto(String concepto) {
                        this.concepto = concepto;
            }
            public Double getImporte() {
                        return importe;
            }
            public void setImporte(Double importe) {
                        this.importe = importe;
            }
}
En alguna clase JAVA en la que se desea agregar el método en el cual se implementará la conversión de objetos con Gson; para hacer posible implementar la conversión de objetos al formato JAVA para que, de este modo, pueda ser enviado a través del servicio en el modelo SpringMVC logrando desplegar el servicio RESTful. Esto es posible gracias al el uso de dos métodos propios del Gson uno es el toJson(), utilizado para convertir objetos Java al formato JSON, y el otro método que es el más usado, el fromJson(), utilizado para convertir del formato JSON en objetos Java.
 
import com.google.gson.Gson;
@Controller
@Scope("session")
public class GestionController {
@Autowired
            private RestTemplate restTemplate;
@RequestMapping(value ="/recibo.htm" )
            public String recibos( ModelMap model , HttpServletRequest request, HttpServletResponse response ){
                        Documentos d = (Documentos) request.getSession().getAttribute("s_expediente");
                        try {
 
                    // Obtención de la cabecera del recibo
                                   String url = "http://localhost:8080/gestiondocumental-rest/rs/rest/usuarios-service/{anio}/{corr}/{tipo}/recibo";
                    // Obtención de datos en la respuesta del modelo REST
                                   String respuesta = restTemplate.getForObject(url , String.class, d.getDocanonum() ,d.getDoccor() , d.getTpodoccod());
                    // Uso del Gson para obtener datos de un Objeto
                    // Inicialización del objeto Gson
                                   Gson gson = new Gson();
                    // Obtención del objeto Recibos que almacena los datos enviados en la solicitud del mensaje, para ser convertidos del formato JSON en objetos Java
                    Recibos recibo= gson.fromJson(respuesta,Recibos.class);
                    // Guardando el objeto Recibo como atributo del requerimiento para posteriormente ser utilizado
                    request.setAttribute("recibo", recibo);
                    // Se agrega en el objeto model que es del tipo ModelMap para ser enviado en la respuesta que retornar en el parámetro model.
                    model.put("expediente", d);
                    // Obtención del detalle del recibo
                                    url = "http://localhost:8080/gestiondocumental-rest/rs/rest/usuarios-service/{anio}/{corr}/{tipo}/recibo/{recfact}/detalle";
                    // Obtención de datos en la respuesta del modelo REST
                                   respuesta = restTemplate.getForObject(url , String.class, d.getDocanonum() ,d.getDoccor() , d.getTpodoccod(),recibo.getDocrecfact());
                    // Uso del Gson para obtener un Listado del detalle del Objeto
                    // Inicialización del objeto Gson
                                   gson = new Gson();
                    // Aplicación de la parametrización de la colección que retornará la lista del detalle del recibo
                                   Type collectionType= new com.google.gson.reflect.TypeToken<List<DetRecibo>>(){}.getType();
                    // Obtención de la Lista del objetos DetRecibo que almacena los datos enviados como colección en la solicitud del mensaje, para ser convertidos del formato JSON en objetos Java
                    List<DetRecibo> listaPedidos= gson.fromJson(respuesta , collectionType);
                    // Guardando la lista de obejtos DetRecibo como atributo del requerimiento para posteriormente ser utilizado
                    request.setAttribute("lista", listaPedidos);                 
                        } catch (Exception e) {
                                    e.printStackTrace();
                                    request.setAttribute("MENSAJE", "No se encontraron datos.");
                        }
                        return "recibo";
            }
}


No hay comentarios:

Publicar un comentario