En este tema, aprenderemos cómo crear controladores REST en Spring Boot. Los controladores REST son componentes clave en la construcción de servicios web RESTful, ya que manejan las solicitudes HTTP y devuelven las respuestas adecuadas.
Conceptos Clave
- Controlador REST: Un componente que maneja las solicitudes HTTP y devuelve respuestas.
- Anotaciones: Utilizamos anotaciones específicas de Spring para definir controladores y mapear rutas.
- Métodos HTTP: GET, POST, PUT, DELETE, etc., que se utilizan para realizar operaciones CRUD.
Paso 1: Crear un Controlador REST Básico
1.1. Anotación @RestController
La anotación @RestController se utiliza para definir una clase como un controlador REST. Esta anotación es una combinación de @Controller y @ResponseBody, lo que significa que los métodos de la clase devolverán datos directamente en el cuerpo de la respuesta HTTP.
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api")
public class MyRestController {
@GetMapping("/hello")
public String sayHello() {
return "Hello, World!";
}
}Explicación del Código
@RestController: Define la clase como un controlador REST.@RequestMapping("/api"): Define la ruta base para todas las solicitudes manejadas por este controlador.@GetMapping("/hello"): Mapea las solicitudes GET a la ruta/api/helloal métodosayHello.sayHello(): Método que maneja la solicitud y devuelve la cadena "Hello, World!".
Paso 2: Manejo de Diferentes Métodos HTTP
2.1. Anotaciones para Métodos HTTP
Spring Boot proporciona anotaciones específicas para manejar diferentes métodos HTTP:
@GetMapping: Maneja solicitudes GET.@PostMapping: Maneja solicitudes POST.@PutMapping: Maneja solicitudes PUT.@DeleteMapping: Maneja solicitudes DELETE.
Ejemplo Completo
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
@RestController
@RequestMapping("/api/items")
public class ItemController {
private List<String> items = new ArrayList<>();
@GetMapping
public List<String> getAllItems() {
return items;
}
@PostMapping
public String addItem(@RequestBody String item) {
items.add(item);
return "Item added successfully";
}
@PutMapping("/{index}")
public String updateItem(@PathVariable int index, @RequestBody String item) {
if (index >= 0 && index < items.size()) {
items.set(index, item);
return "Item updated successfully";
} else {
return "Item not found";
}
}
@DeleteMapping("/{index}")
public String deleteItem(@PathVariable int index) {
if (index >= 0 && index < items.size()) {
items.remove(index);
return "Item deleted successfully";
} else {
return "Item not found";
}
}
}Explicación del Código
@GetMapping: Devuelve la lista de todos los ítems.@PostMapping: Añade un nuevo ítem a la lista.@PutMapping("/{index}"): Actualiza un ítem en la posición especificada.@DeleteMapping("/{index}"): Elimina un ítem en la posición especificada.@RequestBody: Indica que el parámetro del método debe ser leído del cuerpo de la solicitud.@PathVariable: Extrae valores de la URL de la solicitud.
Ejercicio Práctico
Ejercicio 1: Crear un Controlador REST para Gestionar Usuarios
- Crea una clase
UserControlleren tu proyecto Spring Boot. - Define rutas para manejar las siguientes operaciones:
- Obtener todos los usuarios (
GET /api/users) - Añadir un nuevo usuario (
POST /api/users) - Actualizar un usuario existente (
PUT /api/users/{id}) - Eliminar un usuario (
DELETE /api/users/{id})
- Obtener todos los usuarios (
Solución
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
@RestController
@RequestMapping("/api/users")
public class UserController {
private List<String> users = new ArrayList<>();
@GetMapping
public List<String> getAllUsers() {
return users;
}
@PostMapping
public String addUser(@RequestBody String user) {
users.add(user);
return "User added successfully";
}
@PutMapping("/{id}")
public String updateUser(@PathVariable int id, @RequestBody String user) {
if (id >= 0 && id < users.size()) {
users.set(id, user);
return "User updated successfully";
} else {
return "User not found";
}
}
@DeleteMapping("/{id}")
public String deleteUser(@PathVariable int id) {
if (id >= 0 && id < users.size()) {
users.remove(id);
return "User deleted successfully";
} else {
return "User not found";
}
}
}Resumen
En esta sección, hemos aprendido cómo crear controladores REST en Spring Boot utilizando anotaciones como @RestController, @GetMapping, @PostMapping, @PutMapping, y @DeleteMapping. También hemos visto cómo manejar diferentes métodos HTTP y cómo trabajar con rutas y parámetros de solicitud.
En el siguiente tema, profundizaremos en el manejo de métodos HTTP y cómo gestionar las solicitudes y respuestas de manera más detallada.
Curso de Spring Boot
Módulo 1: Introducción a Spring Boot
- ¿Qué es Spring Boot?
- Configuración de tu Entorno de Desarrollo
- Creando tu Primera Aplicación Spring Boot
- Entendiendo la Estructura del Proyecto Spring Boot
Módulo 2: Conceptos Básicos de Spring Boot
- Anotaciones de Spring Boot
- Inyección de Dependencias en Spring Boot
- Configuración de Spring Boot
- Propiedades de Spring Boot
Módulo 3: Construyendo Servicios Web RESTful
- Introducción a los Servicios Web RESTful
- Creando Controladores REST
- Manejo de Métodos HTTP
- Manejo de Excepciones en REST
Módulo 4: Acceso a Datos con Spring Boot
- Introducción a Spring Data JPA
- Configuración de Fuentes de Datos
- Creación de Entidades JPA
- Uso de Repositorios de Spring Data
- Métodos de Consulta en Spring Data JPA
Módulo 5: Seguridad en Spring Boot
- Introducción a Spring Security
- Configuración de Spring Security
- Autenticación y Autorización de Usuarios
- Implementación de Autenticación JWT
Módulo 6: Pruebas en Spring Boot
- Introducción a las Pruebas
- Pruebas Unitarias con JUnit
- Pruebas de Integración
- Simulación con Mockito
Módulo 7: Funciones Avanzadas de Spring Boot
Módulo 8: Despliegue de Aplicaciones Spring Boot
Módulo 9: Rendimiento y Monitoreo
- Ajuste de Rendimiento
- Monitoreo con Spring Boot Actuator
- Uso de Prometheus y Grafana
- Gestión de Registros y Logs
