Spring Boot es una herramienta que genera un proyecto Maven con Spring y las tecnologías que necesitemos. En este caso usaremos Jersey, que sirve para crear servicios Web Rest.
Uso del Inicializador de Spring Boot
Vamos a la página del Inicializador de Spring Boot (http://start.spring.io/) y en Search for dependencies buscamos y seleccionamos “Jersey (JAX-RS)”. Después, pulsamos en “Generate Project” y automáticamente se descargará un ZIP con la base del proyecto.
En Eclipse, importamos este proyecto como Proyecto Maven y esperamos a que se bajen las dependencias.
Beans de Java
Lo primero que tenemos que hacer es crear los beans de Java que contendrán la estructura del JSON que devolverá nuestro servicio Web. Crearemos una clase MyObject y otra clase que será una lista de MyObjects.
MyObject
package com.luisgomezcaballero.springbootjerseydemo; import java.io.Serializable; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlRootElement; @XmlAccessorType(XmlAccessType.NONE) @XmlRootElement(name = "myObject") public class MyObject implements Serializable { private static final long serialVersionUID = 1L; @XmlAttribute(name = "myInt") private int myInt; @XmlAttribute(name = "myString") private String myString; public MyObject(int myInt, String myString) { super(); this.myInt = myInt; this.myString = myString; } public int getMyInt() { return myInt; } public void setMyInt(int myInt) { this.myInt = myInt; } public String getMyString() { return myString; } public void setMyString(String myString) { this.myString = myString; } }
MyObjectList
package com.luisgomezcaballero.springbootjerseydemo; import java.util.ArrayList; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @XmlAccessorType(XmlAccessType.NONE) @XmlRootElement(name = "myObjectList") public class MyObjectList { @XmlElement(name = "myObject") private ArrayList<MyObject> myObjectList; public ArrayList<MyObject> getMyObjectList() { return myObjectList; } public void setMyObjectList(ArrayList<MyObject> myObjectList) { this.myObjectList = myObjectList; } }
Controlador
Con estos dos componentes, ya solo nos falta crear una clase controlador que los use y los devuelva en formato JSON.
MyController
package com.luisgomezcaballero.springbootjerseydemo; import java.util.ArrayList; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; @XmlAccessorType(XmlAccessType.NONE) @XmlRootElement(name = "objects") @Path("/objects") public class MyController { @GET @Produces("application/json") public MyObjectList getAllObjects() { ArrayList<MyObject> myList = new ArrayList<>(); myList.add(new MyObject(1, "abc")); myList.add(new MyObject(2, "def")); myList.add(new MyObject(3, "ghi")); MyObjectList myObjectList = new MyObjectList(); myObjectList.setMyObjectList(myList); return myObjectList; } }
Configuración del proyecto
Finalmente hay que configurar el proyecto para que registre los componentes.
JerseyConfig
package com.luisgomezcaballero.springbootjerseydemo; import org.glassfish.jersey.server.ResourceConfig; import org.springframework.stereotype.Component; @Component public class JerseyConfig extends ResourceConfig { public JerseyConfig() { register(MyController.class); } }
SpringBootJerseyDemoApplication
package com.luisgomezcaballero.springbootjerseydemo; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.support.SpringBootServletInitializer; @SpringBootApplication public class SpringBootJerseyDemoApplication extends SpringBootServletInitializer { public static void main(String[] args) { new SpringBootJerseyDemoApplication() .configure(new SpringApplicationBuilder(SpringBootJerseyDemoApplication.class)).run(args); } }
Resultado
Lanzamos la aplicación con “Run as…/Java Application” sobre la clase que contiene el método main(), que en mi caso es SpringBootJerseyDemoApplication.java.
Al acceder a la URI http://localhost:8080/objects veremos como devuelve un objeto JSON.
Repositorio
El código de este proyecto está situado en https://github.com/luisgomezcaballero/spring-boot-jersey-demo.
So, what do you think ?