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/hello
al 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
UserController
en 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