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]] |