Muestra las diferencias entre dos versiones de la página.
|
unidades:10_servidor:02_json [2014/08/30 16:00] admin [Instalacion] |
unidades:10_servidor:02_json [2014/11/26 16:41] (actual) admin [Encapsular Jackson] |
||
|---|---|---|---|
| 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> |
| - | Para usar Jackson es necesario descargar los jars de las siguientes páginas: | + | public class Main { |
| - | * [[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 has sido hecho son la versión 2.4 y los enlaces directos son: | ||
| - | * [[http://repo2.maven.org/maven2/com/fasterxml/jackson/core/jackson-annotations/2.4.0/jackson-annotations-2.4.0.jar|jackson-annotations-2.4.0.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]] | ||
| + | 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 | ||
| - | Una vez descargados simplemente habrá que añadirlos al proyecto. | + | <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]] |