JAX-RS Client y JSON

El API de JAX-RS Client va a terminar por ser una de las más utilizadas , la llegada de las nuevas arquitecturas de Microservicios supondrá una explosión a la hora de crear servicios REST. Vamos a introducirla brevemente y ver como funciona. En este caso usaremos una aplicación de consola que invoque un servicio REST. Para ello construiremos un proyecto de Maven con varias dependencias.


<dependencies>
 <dependency>
 <groupId>org.glassfish.jersey.media</groupId>
 <artifactId>jersey-media-json-jackson</artifactId>
 <version>2.23.1</version>
 </dependency>

 <!-- https://mvnrepository.com/artifact/org.glassfish.jersey.core/jersey-client -->
 <dependency>
 <groupId>org.glassfish.jersey.core</groupId>
 <artifactId>jersey-client</artifactId>
 <version>2.23.1</version>
 </dependency>

 </dependencies>

Una vez instaladas las dependencias el uso del API es muy sencillo , en nuestro caso vamos a invocar un servicio REST que nos devuelve una lista de Personas. El primer paso es crear la clase Persona.


package com.arquitecturajava;

import java.io.Serializable;

public class Persona implements Serializable {
private static final long serialVersionUID = 6285845014865471015L;
private String nombre;
private String apellidos;
private int edad;

public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getApellidos() {
return apellidos;
}
public void setApellidos(String apellidos) {
this.apellidos = apellidos;
}
public int getEdad() {
return edad;
}
public void setEdad(int edad) {
this.edad = edad;
}
}

JAX-RS Client API

Una vez disponemos de nuestro objeto de negocio usamos JAX-RS Client API  e invocamos al servicio desde una aplicación de consola.

Vamos a ver el código:


Client client = ClientBuilder.newClient().register(new JacksonFeature());
Persona persona = client
.target("http://localhost:3000/persona/pepe")
.request(MediaType.APPLICATION_JSON).get(Persona.class);

System.out.println(persona.getNombre());
System.out.println(persona.getApellidos());
System.out.println(persona.getEdad());

La aplicación imprimirá los datos por pantalla:

Solicitar que nos devuelta la lista de personas es similar pero hace falta apoyarse en genéricos.


package com.arquitecturajava;
import java.util.List;

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.core.GenericType;
import javax.ws.rs.core.MediaType;

import org.glassfish.jersey.jackson.JacksonFeature;

public class ClienteRest2 {

public static void main(String[] args) {

Client client = ClientBuilder.newClient().register(new JacksonFeature());
List<Persona> personas = client
.target("http://localhost:3000/persona")
.request(MediaType.APPLICATION_JSON).get(new GenericType<List<Persona>>() {
});

for(Persona p: personas) {

System.out.println(p.getNombre());
System.out.println(p.getApellidos());
System.out.println(p.getEdad());

}

}

}

El resultado nos mostrará una lista de elementos.

Hemos realizado dos peticiones a un servicio REST que devuelve los datos en formato JSON usando JAX-RS Client API

Otros artículos relacionados :

Spring Rest Controllers 

Servicios REST