Cliente JAX-RS con Jersey

1. Información general

Jersey es un marco de código abierto para desarrollar servicios web RESTFul. También tiene grandes capacidades de cliente incorporadas.

En este tutorial rápido, exploraremos la creación del cliente JAX-RS usando Jersey 2.

Para obtener más información sobre la creación de servicios web RESTful utilizando Jersey, consulte este artículo.

2. Dependencias de Maven

Comencemos agregando las dependencias requeridas (para el cliente Jersey JAX-RS) en el pom.xml :

 org.glassfish.jersey.core jersey-client 2.25.1 

Para usar Jackson 2.x como proveedor JSON:

 org.glassfish.jersey.media jersey-media-json-jackson 2.25.1 

La última versión de estas dependencias se puede encontrar en jersey-client y jersey-media-json-jackson.

3. Cliente RESTFul en Jersey

Desarrollaremos un cliente JAX-RS para consumir las API REST JSON y XML que desarrollamos aquí (debemos asegurarnos de que el servicio esté implementado y la URL sea accesible).

3.1. Clase de representación de recursos

Echemos un vistazo a la clase de representación de recursos:

@XmlRootElement public class Employee { private int id; private String firstName; // standard getters and setters }

Las anotaciones JAXB como @XmlRootElement son necesarias solo si se necesita soporte XML.

3.2. Crear una instancia de un cliente

Lo primero que necesitamos es una instancia de un Cliente :

Client client = ClientBuilder.newClient();

3.3. Crear un WebTarget

Una vez que tenemos la instancia del Cliente , podemos crear un WebTarget usando el URI del recurso web de destino:

WebTarget webTarget = client.target("//localhost:8082/spring-jersey");

Usando WebTarget , podemos definir una ruta a un recurso específico:

WebTarget employeeWebTarget = webTarget.path("resources/employees");

3.4. Creación de una invocación de solicitud HTTP

Se crea una instancia de generador de invocaciones con uno de los métodos WebTarget.request () :

Invocation.Builder invocationBuilder = employeeWebTarget.request(MediaType.APPLICATION_JSON);

Para el formato XML, se puede utilizar MediaType.APPLICATION_XML .

3.5. Invocar solicitudes HTTP

Invocando HTTP GET:

Response response = invocationBuilder.get(Employee.class);

Invocando HTTP POST:

Response response = invocationBuilder .post(Entity.entity(employee, MediaType.APPLICATION_JSON);

3.6. Cliente REST de muestra

Comencemos a escribir un cliente REST simple. El método getJsonEmployee () recupera un objeto Empleado según la identificación del empleado . El JSON devuelto por el servicio web REST se deserializa en el objeto Empleado antes de regresar.

Usando la API JAX-RS con fluidez para crear un destino web, un constructor de invocaciones e invocar una solicitud GET HTTP:

public class RestClient { private static final String REST_URI = "//localhost:8082/spring-jersey/resources/employees"; private Client client = ClientBuilder.newClient(); public Employee getJsonEmployee(int id) { return client .target(REST_URI) .path(String.valueOf(id)) .request(MediaType.APPLICATION_JSON) .get(Employee.class); } //... }

Agreguemos ahora un método para la solicitud POST HTTP. El método createJsonEmployee () crea un empleado invocando el servicio web REST para la creación de empleados . La API del cliente serializa internamente el objeto Employee en JSON antes de invocar el método HTTP POST:

public Response createJsonEmployee(Employee emp) { return client .target(REST_URI) .request(MediaType.APPLICATION_JSON) .post(Entity.entity(emp, MediaType.APPLICATION_JSON)); }

4. Prueba del cliente

Probemos a nuestro cliente con JUnit:

public class JerseyClientLiveTest { public static final int HTTP_CREATED = 201; private RestClient client = new RestClient(); @Test public void givenCorrectObject_whenCorrectJsonRequest_thenResponseCodeCreated() { Employee emp = new Employee(6, "Johny"); Response response = client.createJsonEmployee(emp); assertEquals(response.getStatus(), HTTP_CREATED); } }

5. Conclusión

En este artículo, presentamos el cliente JAX-RS usando Jersey 2 y desarrollamos un cliente Java RESTFul simple.

Como siempre, el código fuente completo está disponible en este proyecto de Github.