domingo, 8 de octubre de 2017

Creando un webservice RESTFUL con Jersey - Parte 1

Creando un webservice RESTFUL con Jersey, 

Crear un projecto en eclipse con maven, buscar el artefacto jersey-quickstart-webapp, si no lo tienes registrado, agregalo a tu eclipse con estas configuraciones:














Agregar la dependencia para los servlets en el archivo pom.xml
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>

Maven crea el archivo web.xml con las siguientes configuraciones:

<?xml version="1.0" encoding="UTF-8"?>
<!-- This web.xml file is not required when using Servlet 3.0 container,
     see implementation details http://jersey.java.net/nonav/documentation/latest/jax-rs.html -->
<web-app version="2.5" 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_2_5.xsd">
    <servlet>
        <servlet-name>Jersey Web Application</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>Jersey</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey Web Application</servlet-name>
        <url-pattern>/webapi/*</url-pattern>
    </servlet-mapping>
</web-app>

Para utilizar jersey se carga el ServletContainer de jersey como se indica en el tag servlet. El param value se refiere al paquete java donde estan contenidos todos las clases de los servicios web.  El servlet mapping puede referirse a cualquier url.  En este caso se selecciona el url webapi.

Tambien crea la siguiente clase de java:
package Jersey;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

/**
 * Root resource (exposed at "myresource" path)
 */
@Path("myresource")
public class MyResource {

    /**
     * Method handling HTTP GET requests. The returned object will be sent
     * to the client as "text/plain" media type.
     *
     * @return String that will be returned as a text/plain response.
     */
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String getIt() {
        return "Got it!";
    }

}

Para accesar el servicio se usa la siguiente direccion:

http://localhost:8080/Jersey/webapi/myresource

Crear un nuevo recurso:

Crea una nueva clase sobre el paquete principal.

package Jersey;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("message")
public class MyMessage {
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String getMessage() {
        return "My Message is here";
    }
}

Cada clase de servicio web, se debe indicar el path y el tipo de accion GET, POST, DELETE en el metodo de nuestra eleccion, este metodo se ejecutara cuando se haga llamada a http://localhost:8080/Jersey/webapi/message  

Utilizando JSON en el recurso:
Se hace referencia al mediatype MediaType.APPLICATION_JSON.  En lugar de que el metodo regrese un string, cambiaremos a un List. 

      @GET
@Produces(MediaType.APPLICATION_JSON)
public List<String> getMessage() {

ArrayList<String> arr = new ArrayList<String>();
arr.add("hola como te va");
arr.add("muy bien y tu");
return arr;
}


Es importante instalar la herramienta POSTMAN de Chrome, esta se utiliza mucho para evaluar webservices con JSON.  Aqui el ejemplo de la clase anterior:




Por favor ahora continua con la segunda parte.







No hay comentarios:

Publicar un comentario