Martes, 18 Abril 2017 00:00

Cliente Rest en java con Jersey (Consola/Swing)

Escrito por 
Valora este artículo
(0 votos)

Si quisieramos  consumir Web services desde  una aplicacion de consola/desktop java, una alternativa es usar las librerias de Jersey, a continuacion veremos un sencillo ejemplo de como poder hacerlo.

 

A continuacion las dependencias que necesitamos, en este caso sobre Maven

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<dependencies>
        <!-- https://mvnrepository.com/artifact/javax.ws.rs/javax.ws.rs-api -->
        <dependency>
            <groupId>javax.ws.rs</groupId>
            <artifactId>javax.ws.rs-api</artifactId>
            <version>2.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.sun.jersey/jersey-client -->
        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-client</artifactId>
            <version>1.19</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.glassfish.jersey.core/jersey-server -->
        <dependency>
            <groupId>org.glassfish.jersey.core</groupId>
            <artifactId>jersey-server</artifactId>
            <version>2.22.2</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.sun.jersey/jersey-json -->
        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-json</artifactId>
            <version>1.19</version>
        </dependency>
</dependencies>

Para este caso parto de que cuento con  una clase Persona

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package client;
 
/**
 *
 * @author rafa22
 */
public class Persona {
    private Integer id;
    private String nombre;
 
    public Persona() {
    }
 
    public Integer getId() {
        return id;
    }
 
    public void setId(Integer id) {
        this.id = id;
    }
 
    public String getNombre() {
        return nombre;
    }
 
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }
    
}

Luego, para mi caso tengo una clase ClienRest  que me sirve para  la configuracion comun de todas mis peticiones que realice

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package client;
 
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
import com.sun.jersey.api.json.JSONConfiguration;
 
/**
 *
 * @author rafa22
 */
public class ClientRest {
 
    protected WebResource webResource;
    protected Client client;
    protected static final String BASE_URL = "http://localhost:8080/web-services/public/v1/";
 
    public ClientRest(String path) {
        ClientConfig cc = new DefaultClientConfig();
        cc.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
        client = Client.create(cc);
        this.webResource = client.resource(BASE_URL).path(path);
    }
 
}

Para describir sencillamente, en la linea 20 creamos la configuracion para  un cliente, la linea 21 es necesaria para poder mapear nuestro Json a una clase java de nuestro dominio, en la siguiente linea creamos  un cliente con la configuracion anteriormente, y por ultimo la webresource le asignamos el cliente, a este previamente le asignamos el resource, el BASE_URL, mas un String path que le pasamos en el contructor. Por ejemplo le pasamos la constante BASE_URL + path ( "http://localhost:8080/web-services/public/v1/" + "personas")

 Ahora  tendo una clase  que hereda de la anterior clase explicada

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package client;
 
 
import com.sun.jersey.api.client.GenericType;
import java.util.List;
import javax.ws.rs.core.MediaType;
 
/**
 *
 * @author rafa22
 */
public class ClientPersona extends ClientRest {
    
    public ClientPersona(String path) {
        super(path);
    }
    
    public List<Persona> getPersonas(){
        return this.webResource.path("all").accept(MediaType.APPLICATION_JSON).get(new GenericType<List<Persona>>(){});
    }
    
}

Lo importante de esta ultima clase es el metodo getPersonas(),  que me llama al Web service rest

http://localhost:8080/web-services/public/v1/personas/all

La estructura del Json que me devuelve el rest es

1
2
3
4
5
6
[
  {
    "id": 1,
    "nombre": "Patricia Geronimo"
  }
]

Este Json es un arreglo de Personas (El item del arreglo coincide con la estructura del POJO Persona), a este lo mapeamos  mediante new GenericType<List<Persona>>(){},  si por  ejemplo nesecitamos traer solamente una persona el   metodo seria asi

1
2
3
    public Persona getPersona(){
        return this.webResource.accept(MediaType.APPLICATION_JSON).get(Persona.class);
    }    

Por ultimo probamos  en un metodo main

1
2
3
4
5
6
7
8
9
    public static void main(String[] args) throws Exception {
       
        ClientPersona clientRest = new ClientPersona("personas");
        List<Persona> personas = clientRest.getPersonas();
        for (Persona personas : persona) {
            System.out.println("salida:" + persona.getNombre());
 
        }
    }

Bueno, aclaro que  hay otras formas de poder consumir  un ws desde un cliente, pero esta me  parece la mejor por   como esta estructurado y las cantidad de opciones que tenemos para poder configurar  nuestras peticiones. Hasta pronto

Visto 615 veces Modificado por última vez en Miércoles, 19 Abril 2017 00:19

1 comentario

  • Enlace al Comentario Justki Sábado, 23 Diciembre 2017 14:51 publicado por Justki

    Le Prix Du Cialis Order Nexium From Canada Sildenafil Precio http://costofcial.com - viagra cialis Can I Give My Dog Amoxicillin Propecia Es Lo Mismo Que Finasterida Propecia For Daily Use Cost Can Buy Ropinirole Over The Counter Viagra In Canada Without Prescription Lasix Without Prescription cialis Cialis Paypal Accepted Diflucan Online Order Buying Generic On Line Zentel Ups Overnight Shipping http://costofcial.com - online pharmacy Levitra Oder Cialis Redtube Adalat

Deja un comentario

Asegúrate de llenar la información requerida marcada con (*). No está permitido el código HTML. Tu dirección de correo NO será publicada.