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

  1. Controlador REST: Un componente que maneja las solicitudes HTTP y devuelve respuestas.
  2. Anotaciones: Utilizamos anotaciones específicas de Spring para definir controladores y mapear rutas.
  3. 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é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

  1. Crea una clase UserController en tu proyecto Spring Boot.
  2. 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})

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

Módulo 2: Conceptos Básicos de Spring Boot

Módulo 3: Construyendo Servicios Web RESTful

Módulo 4: Acceso a Datos con Spring Boot

Módulo 5: Seguridad en Spring Boot

Módulo 6: Pruebas en Spring Boot

Módulo 7: Funciones Avanzadas de Spring Boot

Módulo 8: Despliegue de Aplicaciones Spring Boot

Módulo 9: Rendimiento y Monitoreo

Módulo 10: Mejores Prácticas y Consejos

© Copyright 2024. Todos los derechos reservados