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étodo- sayHello.
- 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
