:::: MENU ::::

Spring Boot


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 ?