Web Service Rest (Jersey) con Java EE

| 2014-06-24 | No hay comentarios »

En éste artículo vamos a ver como utilizar Jersey con las mismas funcionalidades que ya creamos con RESTEasy (suma dos números y devuelve el resultado), por ese motivo, recomiendo que primero lean todo éste artículo:  Web Service Rest (RESTEasy) con Java EE

Antes de empezar, veamos unos ejemplos de anotaciones que podemos usar con Jersey:

  • @GET: Indica que el método anotado corresponde a una petición HTTP GET.

  • @POST: Indica que el método anotado corresponde a una petición HTTP POST.

  • @HeaderParam: Enlaza una cabecera http al parámetro de un método.

  • @HttpMethod: Asocia un método con el nombre de un método HTTP .

  • @Path: Identidica la URI de una clase o método que sirve las peticiones.

  • @ProduceMime: Define el/los tipo(s) MIME que los métodos producen.

  • @QueryParam: Enlaza un parámetro de la petición HTTP con un parámetro del método java anotado.

  • … más sobre el api en https://jsr311.dev.java.net/nonav/releases/0.6/index.html

Requerimientos de software 

  • Java Software Development Kit: JDK
  • IDE: NetBeans (preferentemente, con todas las características y con Tomcat Application Server)
  • Maven

¿Cómo crear el Proyecto? 

  • Abrir Netbeans.
  • Archivo, Nuevo proyecto, seleccione Maven, luego: Aplicaciones Web y  haga clic en Siguiente y utilice RestJersey como nombre, puede utilizar cualquier package por defecto.

maven

Si todo va bien deberían de observar el archivo index.jsp y si ejecutan el proyecto verán el famoso “Hello World!”.

Ahora que ya tenemos el proyecto listo, hacer clic derecho en el proyecto y elegir la opción Nuevo -> Java Package (Nombre: edu.uci.quinto.rest)

– Debemos de agregar las dependencias de Jersey y Gson en el archivo pom.xml:


<dependencies>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.2.4</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.17.1</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
<version>1.17.1</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-servlet</artifactId>
<version>1.17.1</version>
</dependency>
</dependencies>

-Posteriormente debemos modificar el archivo web.xml para poder utilizar Jersey y dejarlo así:


<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name>Restful Web Application</display-name>

<servlet>
<servlet-name>jersey-serlvet</servlet-name>
<servlet-class>
com.sun.jersey.spi.container.servlet.ServletContainer
</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>edu.uci.quinto.rest</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>jersey-serlvet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>

Quiero aclarar que edu.uci.quinto.rest es el nombre del paquete donde estarán todas las clases que tendrán los distintos métodos y funcionalidades del web service.

Con eso terminamos la parte de configuración, la parte “tediosa”, ahora vamos a crear una nueva clase llamada “SumaRestService” dentro del package rest del proyecto:


package edu.uci.quinto.rest;

/**
*
* @author Rodrigo
*/
import com.google.gson.Gson;
import edu.uci.quinto.clases.Numeros;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/suma")
public class SumaRestService {

@GET
@Path("/sumar/{parameter}/{parameter2}")
public String sumarNumerosGet(@PathParam("parameter") int msg, @PathParam("parameter2") int msg2) {

return String.valueOf(msg+msg2);

}

@POST
@Path("/sumar")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.TEXT_PLAIN)
public String sumarNumerosPost(String json) {
Gson gson = new Gson();
Numeros nums = gson.fromJson(json, Numeros.class);
String responseString = String.valueOf(nums.getNro1()+nums.getNro2());

return responseString;

}

@PUT
@Path("/sumar")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.TEXT_PLAIN)
public String sumarNumerosPut(String json) {
Gson gson = new Gson();
Numeros nums = gson.fromJson(json, Numeros.class);
String responseString = String.valueOf(nums.getNro1()+nums.getNro2());

return responseString;

}

}

Aquí vemos varias anotaciones @Path, @GET, @PathParam, @Consumes, @Produces, @PUT, @POST. Con la primera estamos indicando parte de la URL en la que el web service responderá, con la segunda indicamos que el método HTTP que llame a esa URL deberá ser get, con la tercera recogemos un parámetro indicado en la URL, con la cuarta indicamos que tipo de formato estaremos utilizando, con la quinta el tipo de formato que estaremos devolviendo, con la sexta y séptima que estaremos utilizando POST o PUT respectivamente.

También se puede observar que hay tres métodos (para que lo tengan como ejemplo de GET, POST y PUT) y como se utiliza la librería de Google Gson para convertir un string json a un objeto java o viceversa, para que funcione debemos de crear un package edu.uci.quinto.clases y dentro del package una clase llamada Numeros:


package edu.uci.quinto.clases;

/**
*
* @author Rodrigo
*/
public class Numeros {
private int nro1;
private int nro2;

public int getNro1() {
return nro1;
}

public void setNro1(int nro1) {
this.nro1 = nro1;
}

public int getNro2() {
return nro2;
}

public void setNro2(int nro2) {
this.nro2 = nro2;
}

}

Ahora que ya está todo listo, debemos de ejecutar el proyecto, para eso hacer clic derecho sobre el proyecto y luego darle ejecutar, les debería de mostrar el index.jsp con el hello world.

El proyecto debería de quedarles así:

restjersey

¿Cómo probar el Web Service y la operación suma?

– La opción que podemos probar directamente desde cualquier navegador: HTTP GET -> http://localhost:8084/RestJersey/rest/suma/sumar/8/5 y el Web Service nos devolvera el resultado (8 y 5 son los dos parámetros).

getrest

¿Cómo probar solicitudes POST , PUT , DELETE?

El software que utilizo para hacer pruebas de distintos web services se llama SoapUI  en su edición Open Source, una vez que instalen el programa ir a File -> New REST Project:

Url: http://localhost:8084/RestJersey/rest/suma/sumar

Utilizar JSON ( { nro1:5, nro2:3 } ) para probar las opciones POST y PUT y el web service nos devolverá el resultado de la suma.

soapuirest

Espero que les pueda ser de utilidad el artículo, como pueden notar prácticamente no hay diferencias entre usar RESTEasy o Jersey al utilizar ejemplos sencillos. Saludos!

Descargar proyecto completo:

github-logo

Acerca del autor: Rodrigo Paszniuk

Ingeniero Informático, amante de la tecnología, la música, el ciclismo y aprender cosas nuevas.

Posts Relacionados

  • JSF 2 con Maven – Hola Mundo
  • Acceso a Web Service REST en Android
  • Web Service Rest (RESTEasy) con Java EE
  • Web Service Soap con Java EE



SEGUÍNOS EN FACEBOOK


GITHUB