Ver destacados

🔻 Java: De tu interés

Cómo utilizar tipos genericos en Java

En este tutorial se ve cómo utilizar tipos genéricos en Java, para ello se facilitan 2 ejemplos, el primero de una clase genérica y el segundo de una función genérica

Cómo hacer una API REST con SpringMVC en Java

Breve explicación de una API REST con los métodos get y post en java usando SpringMVC

Google Maps API con Android Studio

Aquí presentamos la iniciación para usar las librerías y métodos incluidos en la interfaz de desarrollo de aplicaciones de Google Maps dirigido a desarrollo en Android nativo (JAVA y XML)

Construcción de JSON y XML en Java

En este tutorial estaremos viendo las herramientas para que podamos utilizar cualquiera de los dos formatos y así no limitarnos, por ello veremos cómo atacar la construcción tanto de JSON como XML en nuestras aplicaciones escritas en Java.

Programación Multitarea o Multihilos con Java

Explicando a fondo en qué consiste la multitarea y multihilos con el lenguaje de programación Java y ejemplos practicos.

Hacer cliente para servicios web en Java

En este tutorial veremos cómo hacer algunos clientes de servicios web utilizando Java, donde adicionalmente veremos algunos temas relacionados a las interacciones con las redes de forma general.

Trabajando con Bases de Datos en Java

En este tutorial veremos como podemos trabajar haciendo las diferentes conexiones a Bases de Datos desde el lenguaje de programación Java, con ello lograremos dotar de mayor versatilidad a nuestras aplicaciones y así poder alcanzar objetivos más grandes.

Cómo hacer una API REST con SpringMVC en Java

Breve explicación de una API REST con los métodos get y post en java usando SpringMVC
Escrito por
14.8K Visitas  |  Publicado jul 01 2016 11:29
Favorito
Compartir
Comparte esta pagina a tus Amigos y Contactos usando las siguientes Redes Sociales


En este tutorial se va a enseñar cómo hacer una breve API REST en Java, usando para ello SpringMVC. Veremos las instrucciones GET y POST, las operaciones DELETE y PUT convendría que las hicieras para practicar. Antes de empezar recomiendo descargar Eclipse STS, un IDE bueno para programar en Spring, nos facilita mucho a la hora de crear nuestros proyectos:

 

 DESCARGAR ECLIPSE STS

 

Nota
Debes tener java instalado, si eliges la versión 1.8 mejor.

 

Algunas cosas generales a tener en cuenta
  • Tenemos un controlador, que es el encargado de atender las peticiones que se hagan, la clase que haga de controlador hay que anotarla con @RestController.
  • Por cada URL tenemos que implementar un método. Cada método tendrá que ir con la anotación @RequestMapping con la URL a la que se atiende y el método de la petición y además devolverá el objeto deseado.

 

Ahora vamos a ver un ejemplo, en él tendremos una clase Persona y un controlador para la persona PersonaController.

 

1. Comenzar el proyecto

Abrimos STS y damos a nuevo proyecto “Spring Project Starter” , configuramos las opciones y el nombre y damos a Next, yo lo dejaré como puedes ver en la siguiente imagen:

 

[color=rgb(169,169,169)]Pincha en la imagen para ampliar[/color]

 

En la siguiente pantalla que te aparecerá debemos elegir las opciones que vamos a utilizar, lo vamos a dejar todo sin tocar y le damos a Finish y ya tenemos el proyecto creado, tendremos la siguiente estructura (Nota que yo ya he creado las 2 clases que vamos a usar, y la captura no es de STS):

 

 

Veremos que en src/main/java dentro del paquete hay creada una clase ya y que contiene el siguiente código:

@SpringBootApplication
public class EjemploApiApplication{

	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}
}
Esta clase la dejamos tal cual, nos sirve para ejecutar nuestro ejemplo. Ahora vamos a ir a la clase pom.xml y comprobamos si tenemos el siguiente código, si no está simplemente lo añadimos:
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.3.3.RELEASE</version>
		<relativePath/>
	</parent>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>		
	</dependencies>
Nota
Es posible que tengas que actualizar tu proyecto con maven al guardar ese archivo, en STS tienes la opción para hacerlo (ALT + F5).

 

Ahora vamos a ver las clases que creamos que aspecto tienen.

 

2. Clase Persona

Primero ponemos el código y luego se explica.
public class Perona {
	private long id = -1;
	private String nombre;
	private int edad;

	public Persona() {

	}

	public Persona(String nombre, int edad) {
		super();
		this.nombre = nombre;
		this.edad = edad;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public int getEdad(){
		return edad;
	}

	public void setEdad(int e) {
		edad = e;
	}

	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}
}
Esta clase no es nada difícil de comprender, lo único que tienes que saber es que necesitamos los get y set de cada atributo y también el constructor sin parámetros, ya que serán usados por el controlador, así evitaremos trabajar con muchos parámetros y Spring inyectara estos y creara el objeto.

 

3. Clase PersonaController

De nuevo como primera parte está el código y a continuación la explicación.
@RestController
public class PersonaController {

	private Map<Long, Persona> personas = new ConcurrentHashMap<>();
	private Long idUsado = 0;

	@RequestMapping(value = "/personas", method = RequestMethod.GET)
	public Collection<Anuncio> damePersonas() {
		return personas.values();
	}

	@RequestMapping(value = "/personas", method = RequestMethod.POST)
	@ResponseStatus(HttpStatus.CREATED)
	public Persona addPersona(@RequestBody Persona p) {
		idUsado++;
		p.setId(idUsado);
		personas.put(idUsado, p);

		return p;
	}

	@RequestMapping(value = "/personas/{id}", method = RequestMethod.GET)
	public ResponseEntity<Persona> getPersona(@PathVariable long id) {
		Persona p = personas.get(id);

		if (p != null) 
			return new ResponseEntity<>(p, HttpStatus.OK);

	    return new ResponseEntity<>(HttpStatus.NOT_FOUND);
		
	}

}
Como no vamos a usar base de datos creamos un mapa <id, Persona>, si tuviéramos una base de datos esto sería sustituido por su repositorio, y la variable de idUsado no sería necesaria, pero no es objetivo del tutorial añadir BD.
Dentro de la anotación RequestMapping vemos que tenemos también el método, por defecto es GET, por lo que en esos métodos no sería necesario añadirlo, pero no está de más.

 

Tenemos 3 métodos

damePersonas
Lo que va a hacer es devolver todas las personas que tenemos en nuestro mapa (personas.values()). No tiene mayor complicación.

 

addPersona
Es utilizado para añadir una persona a nuestra colección, puedes ver que el parámetro que tenemos está anotado con @RequestBody, es lo que recibimos del cliente (el cuerpo de la petición). La anotación
@ResponseStatus(HttpStatus.CREATED)
Se pone para devolver un 201 como código de respuesta. Se puede apreciar en el cuerpo como cada vez que se llama aumenta en uno el id, para que sea único y se lo asignamos a la persona, luego la añadimos al mapa y por último el cuerpo de respuesta de la función es esa misma persona.

 

getPersona
Nos va a devolver la persona pedida a través del id. Aquí tenemos que la función devuelve
ResponseEntity<Persona>
Esto es así para devolver un OK y la persona en caso de que exista o un NOT FOUND. El parámetro aquí viene anotado con @PathVariable, ese parámetro tendrá el valor del {id} que ves en RequestMapping y es lo que ponemos en la URL, por ejemplo /personas/1 llama a esta función con el id en 1.

 

 

Nota
La anotación RequestMapping puedes ponerla justo encima de la clase, como muestro a continuación:
@RestController
@RequestMapping("/personas")
public class PersonaController {
    ...
}
Si haces eso, evitarás repetir personas en cada método y puedes simplemente poner lo siguiente:
@RequestMapping(value = "/", method = RequestMethod.GET)
Si hay pocos métodos a lo mejor no te merece la pena, pero para muchos desde luego que es la mejor opción.

 

Bueno ya hemos terminado esta pequeña API.

 

4. Cómo ejecutar el proyecto

Para ejecutar el proyecto, selecciona tu proyecto, en la barra de menús veras un triángulo blanco dentro de un círculo verde (el run de siempre en elclipse), pincha en el pequeño triángulo negro que se encuentra a la derecha, sitúate en Run As y pincha en Spring Boot App.

 

[color=#a9a9a9]Pincha en la imagen para ampliar[/color]

 

Ahora si quieres ampliar el ejemplo te recomiendo añadir los métodos para atender peticiones PUT y DELETE, necesitarás saber el id de la persona a modificar, por lo que lo recibirás como en la última función y en PUT además necesitaras mandar los datos como lo hemos hecho en la función de POST.

 

Si quieres probar tu API REST sin tener que programar un cliente que haga las peticiones puedes usar Postman, es un plugin de Google Chrome:

 

 

Aquí puedes elegir el tipo de petición que quieras, rellenar las cabeceras y el cuerpo que se tienen que enviar, si requiere autenticación, etc. Es un programa muy completo.

 

[color=#a9a9a9]Pincha en la imagen para ampliar[/color]

 

Por ejemplo una petición get para obtener todas las personas en la API corriendo en localhost y escuchando en el puerto 80:

 

¿Te ayudó este Tutorial?

Ayuda a mejorar este Tutorial!
¿Quieres ayudarnos a mejorar este tutorial más? Puedes enviar tu Revisión con los cambios que considere útiles. Ya hay 0 usuario que han contribuido en este tutorial al enviar sus Revisiones. ¡Puedes ser el próximo!