Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

unidades:10_servidor:02_json [2014/08/30 14:35]
admin
unidades:10_servidor:02_json [2014/11/26 16:41] (actual)
admin [Encapsular Jackson]
Línea 3: Línea 3:
  
 Lo primero que tenemos que aprender es como transformar un String en formato JSON a un objeto Java y como transformar un objeto Java en un String JSON. Para ayudarnos en esta tarea hay varias librerías Java siendo las 2 mas famosas: Lo primero que tenemos que aprender es como transformar un String en formato JSON a un objeto Java y como transformar un objeto Java en un String JSON. Para ayudarnos en esta tarea hay varias librerías Java siendo las 2 mas famosas:
-  * [[https://github.com/FasterXML/​jackson|Jackson]]+  * [[http://wiki.fasterxml.com/JacksonHome|Jackson]]
   * [[https://​code.google.com/​p/​google-gson/​|gson]]   * [[https://​code.google.com/​p/​google-gson/​|gson]]
  
Línea 9: Línea 9:
  
 Así que en este tema solo vamos a ver lo básico de usar Jackson y como encapsularlo tras un interfaz para abstraernos de los detalle y por si en un futuro quisiéramos cambiar de librería. Así que en este tema solo vamos a ver lo básico de usar Jackson y como encapsularlo tras un interfaz para abstraernos de los detalle y por si en un futuro quisiéramos cambiar de librería.
 +
 +===== Instalacion =====
 +Para usar Jackson es necesario descargar los jars de las siguientes páginas:
 +  * [[http://​repo2.maven.org/​maven2/​com/​fasterxml/​jackson/​core/​jackson-annotations]]
 +  * [[http://​repo1.maven.org/​maven2/​com/​fasterxml/​jackson/​core/​jackson-core]]
 +  * [[http://​repo1.maven.org/​maven2/​com/​fasterxml/​jackson/​core/​jackson-databind]]
 +
 +Los ejemplos de este curso han sido hecho con la versión 2.4 y los enlaces directos son:
 +  * [[http://​repo2.maven.org/​maven2/​com/​fasterxml/​jackson/​core/​jackson-annotations/​2.4.2/​jackson-annotations-2.4.2.jar|jackson-annotations-2.4.2.jar]]
 +  * [[http://​repo1.maven.org/​maven2/​com/​fasterxml/​jackson/​core/​jackson-core/​2.4.2/​jackson-core-2.4.2.jar|jackson-core-2.4.2.jar]]
 +  * [[http://​repo1.maven.org/​maven2/​com/​fasterxml/​jackson/​core/​jackson-databind/​2.4.2/​jackson-databind-2.4.2.jar|jackson-databind-2.4.2.jar]]
 +
 +
 +Una vez descargados simplemente habrá que :
 +  * Crear una nueva carpeta llamada ''​lib''​ en la raiz del proyecto
 +  * Copiar los jars a la nueva carpeta ''​lib''​
 +  * Añadir los 3 jars al proyecto usando rutas relativas.
  
 ===== Uso de Jackson ===== ===== Uso de Jackson =====
Línea 51: Línea 68:
  
 </​uml>​ </​uml>​
 +
 +<note tip>
 +Por supuesto , este interfaz es muy sencillo , actualmente Java EE 7 ya dispone de [[https://​json-processing-spec.java.net/​|Java API for JSON Processing (JSON-P)]]
 +</​note>​
  
 El código Java es el siguiente: El código Java es el siguiente:
 +<sxh java;title JsonTransformer.java>​
 +package es.cursoangularjs.jackson;​
 +
 +public interface JsonTransformer {
 +    String toJson(Object data);
 +    Object fromJson(String json, Class clazz);
 +}
 +</​sxh>​
 +
 +<note tip>
 +La forma mas correcta ​ de definir el interfaz ''​JsonTransformer''​ es usando Generics en el método ''​fromJSON''​ y de esa forma ahorrarnos el cast ya que el tipo retornado en ''​fromJSON''​ siempre será el mismo que el de la clase que se le pasa como argumento en "​clazz"​
 +
 <sxh java> <sxh java>
 public interface JsonTransformer { public interface JsonTransformer {
- String toJson ​ (Object data); +    ​String toJson(Object data); 
- Object fromJson(String json,Class clazz);+    <​T>​ T fromJSON(String json, Class<​T> ​clazz)
 } }
 </​sxh>​ </​sxh>​
 +
 +Aunque no lo uso en el resto del curso por no liar mas aun el curso.
 +
 +</​note>​
  
 Creamos una implementación para este interfaz usando las librerías de Jackson llamado ''​JsonTransformerImplJackson''​. Creamos una implementación para este interfaz usando las librerías de Jackson llamado ''​JsonTransformerImplJackson''​.
Línea 73: Línea 110:
 </​uml>​ </​uml>​
  
-<sxh java>+El código Java es el siguiente:​ 
 + 
 +<​sxh ​java;​title:​JsonTransformerImplJackson.java> 
 +package es.cursoangularjs.jackson;​ 
 + 
 +import com.fasterxml.jackson.core.JsonProcessingException;​ 
 +import com.fasterxml.jackson.databind.ObjectMapper;​ 
 +import java.io.IOException;​ 
 + 
 +public class JsonTransformerImplJackson implements JsonTransformer { 
 + 
 +    @Override 
 +    public String toJson(Object data) { 
 +        try { 
 +            ObjectMapper objectMapper = new ObjectMapper();​ 
 + 
 +            return objectMapper.writeValueAsString(data);​ 
 +        } catch (JsonProcessingException ex) { 
 +            throw new RuntimeException(ex);​ 
 +        } 
 +    } 
 + 
 +    @Override 
 +    public Object fromJson(String json, Class clazz) { 
 +        try { 
 +            ObjectMapper objectMapper = new ObjectMapper();​ 
 + 
 +            return objectMapper.readValue(json,​ clazz); 
 +        } catch (IOException ex) { 
 +            throw new RuntimeException(ex);​ 
 +        } 
 +    } 
 + 
 +}
 </​sxh>​ </​sxh>​
 +===== Ejemplo =====
 +Ahora veamos un simple ejemplo que usa transforma un objeto ''​Usuario''​ a un String JSON y dicho String se vuelve a transformar a un objeto ''​Usuario''​.
  
-===== Instalacion =====+<sxh java> 
 +public class Main { 
 + 
 + 
 +    public static void main(String[] args) { 
 +        JsonTransformer jsonTransformer=new JsonTransformerImplJackson();​ 
 +         
 +        Usuario usuario=new Usuario("​Alberto Tortosa","​alberto_tortosa@gmail.com",​91);​ 
 +         
 +        String jsonUsuario=jsonTransformer.toJson(usuario);​ 
 +         
 +        System.out.println(jsonUsuario);​ 
 +         
 +         
 +        Usuario newUsuario=(Usuario) jsonTransformer.fromJson(jsonUsuario,​ Usuario.class);​ 
 +           
 +        System.out.println("​Nombre:"​+newUsuario.getNombre());​ 
 +        System.out.println("​E-Mail:"​+newUsuario.getEmail());​ 
 +        System.out.println("​Edad:"​+newUsuario.getEdad());​ 
 + 
 +         
 +    } 
 +     
 +
 +</​sxh>​
  
 +El resultado por pantalla es:
 +  {"​nombre":"​Alberto Tortosa","​email":"​alberto_tortosa@gmail.com","​edad":​91}
 +  Nombre:​Alberto Tortosa
 +  E-Mail:​alberto_tortosa@gmail.com
 +  Edad:91
  
 +<​note>​
 +Este ejemplo se encuentra en  git en [[https://​github.com/​logongas/​cursoangularjs/​tree/​master/​jackson]]
 +</​note>​
 ===== Referencias ===== ===== Referencias =====
-  * [[]]+  * [[http://​wiki.fasterxml.com/​JacksonHome|Jackson]]
unidades/10_servidor/02_json.1409402113.txt.gz · Última modificación: 2014/08/30 14:35 por admin
Ir hasta arriba
CC Attribution-Share Alike 3.0 Unported
chimeric.de = chi`s home Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0