SpringBoot: Spring Web

Aprende a utilizar el módulo Spring Web en Spring Boot 3 para desarrollar aplicaciones web robustas y escalables siguiendo las mejores prácticas actuales.

Spring Boot 3 y su módulo Spring Web son herramientas esenciales para el desarrollo de aplicaciones web en Java. En este artículo, exploraremos cómo configurar y utilizar Spring Web en un proyecto de Spring Boot 3.

Configuración inicial

Para empezar, crea un nuevo proyecto Spring Boot 3. Puedes utilizar Spring Initializr para generar el proyecto base. Asegúrate de incluir el módulo Spring Web en las dependencias.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

Controladores en Spring Web

Los controladores son fundamentales en cualquier aplicación web. En Spring Web, los controladores se definen utilizando la anotación @RestController. Aquí tienes un ejemplo básico:

package com.example.demo.controller;

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 DemoController {

    @GetMapping("/hello")
    public String sayHello() {
        return "Hola, mundo!";
    }
}

Este controlador define un endpoint /api/hello que devuelve un mensaje de saludo.

Manejo de peticiones y respuestas

Spring Web facilita el manejo de peticiones HTTP y la construcción de respuestas. Las anotaciones como @GetMapping, @PostMapping, @PutMapping y @DeleteMapping se utilizan para mapear métodos de controlador a diferentes tipos de peticiones HTTP.

@PostMapping("/create")
public ResponseEntity<String> createResource(@RequestBody MyResource resource) {
    // lógica para crear el recurso
    return ResponseEntity.status(HttpStatus.CREATED).body("Recurso creado");
}

Validación de datos

La validación de datos es crucial en cualquier aplicación. Spring Web soporta la validación utilizando anotaciones de Bean Validation. Añade las dependencias necesarias en tu pom.xml:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

Y en tu controlador:

@PostMapping("/validate")
public ResponseEntity<String> validateResource(@Valid @RequestBody MyResource resource, BindingResult bindingResult) {
    if (bindingResult.hasErrors()) {
        return ResponseEntity.badRequest().body("Datos inválidos");
    }
    return ResponseEntity.ok("Datos válidos");
}

Manejo de excepciones

El manejo de excepciones en Spring Web se puede realizar mediante la anotación @ExceptionHandler. Esto permite definir métodos específicos para manejar diferentes tipos de excepciones.

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(ResourceNotFoundException.class)
    public ResponseEntity<String> handleResourceNotFound(ResourceNotFoundException ex) {
        return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ex.getMessage());
    }
}

Configuración de CORS

La configuración de CORS (Cross-Origin Resource Sharing) es esencial para controlar el acceso a tus recursos desde diferentes dominios. Puedes configurarlo globalmente en Spring Boot 3:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("http://example.com")
                .allowedMethods("GET", "POST", "PUT", "DELETE")
                .allowedHeaders("*")
                .allowCredentials(true);
    }
}
Certifícate en SpringBoot con CertiDevs PLUS

Lecciones de este módulo de SpringBoot

Lecciones de programación del módulo Spring Web del curso de SpringBoot.

Ejercicios de programación en este módulo de SpringBoot

Evalúa tus conocimientos en Spring Web con ejercicios de programación Spring Web de tipo Test, Puzzle, Código y Proyecto con VSCode.