Servicios RESTful con Spring

En esta ocasión creamos servicios web RESTful mediante el Framework Java Spring, podremos utilizar los correspondientes métodos: GET, PUT, UPDATE, DELETE, etc. de la api REST, construiremos un ejemplo sencillo usando JSON y XML.

Para empezar creamos el proyecto y el archivo maven .pom como lo hicimos en el tutorial anterior: Introducción a Spring Framework, lo clase principal la añadiremos luego.

Lo siguiente que haremos será agregar las clases para representar nuestros datos, normalmente un servicio REST almacena los datos en una base de datos, de momento trabajaremos con datos en memoria y en tutoriales futuros veremos como integrar una base de datos.

public class Persona {

    private Long id;
    private String nombre;
    private String direccion;
    private int edad;
    private boolean sexo;

    public Persona() {
    }

    public Persona(String nombre, String direccion, int edad, boolean sexo) {
        this.nombre = nombre;
        this.direccion = direccion;
        this.edad = edad;
        this.sexo = sexo;
    }

Esta clase representa los datos que deseamos exponer mediante nuestro servicio REST, se omitió los correspondientes métodos get y set, la representación en texto plano de la clase será en formato JSON, posteriormente veremos como hacerlo en XML.

Lo siguiente que necesitamos es la clase controladora, le añadimos la anotación @RestController para indicar a Spring Framework que las peticiones http serán manejadas por esta clase. 

La anotación @RequestMapping asegura que la petición identificada por la URL sea manejada por el correspondiente método, en nuestro ejemplo la URL localhost:8080/todos será manejada como un llamado al método todos(), el cual, simplemente mostrara una lista de todas las personas que tengamos almacenadas.

import java.util.ArrayList;
import java.util.List;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class PersonaController {

    @RequestMapping("/todos")
    public List<Persona> todos() {
        List<Persona> ps = new ArrayList<Persona>();

        ps.add(new Persona("Juan Perez", "Panamá", 12, true));
        ps.add(new Persona("María Luna", "Panamá", 15, false));
        ps.add(new Persona("Iván Lopez", "Panamá", 18, true));

        return ps;
    }
}

En este punto nos falta solamente agregar la clase principal, usamos la anotación @SpringBootApplication incluida en la versión 1.2.0 de Spring, la misma es una forma breve de agregar las siguientes anotaciones: @Configuration + @EnableAutoConfiguration + @ComponentScan, para que funcione de manera correcta el proyecto debe estar estructurado según la especificaciones de la documentación oficial.

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class RestInSpring {

    public static void main(String[] args) {
        SpringApplication.run(RestInSpring.class, args);
    }
}

Si ejecutamos la aplicación y accedamos a la siguiente dirección: localhost:8080/todos veremos, si todo esta correcto, algo como esto:

Json spring

Esta es la vista en el navegador de los datos en formato JSON, debemos mencionar que Spring usa automáticamente la librería Jackson JSON para esta tarea. 

Soporte para XML


Si deseamos representar los datos en formato XML solo debemos modificar el archivo pom.xml y agregar las siguientes dependencias al mismo:

<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
</dependency>
<dependency>
<groupId>org.codehaus.woodstox</groupId>
<artifactId>woodstox-core-asl</artifactId>
<version>4.4.1</version>
</dependency>

Simplemente con hacer esto, compilar y ejecutar nuevamente el proyecto veremos ahora la salida en formato XML, si abrimos el navegador y entramos la dirección localhost:8080/todos veremos:

xml spring boot

Comentarios

Entradas populares de este blog

Conectar SQL Server con Java

Entrenar OpenCV en Detección de Objetos

Detección de figuras geométricas