Spring Boot

SpringBoot

Tutorial SpringBoot: Métodos POST en controladores MVC

Aprende a usar métodos POST en controladores MVC con Spring Boot para procesar datos y manejar formularios eficazmente.

Aprende SpringBoot y certifícate

Métodos con @PostMapping en controladores MVC

Los métodos POST en Spring Boot se utilizan principalmente para enviar datos al servidor, especialmente cuando necesitamos crear nuevos recursos o procesar información sensible. A diferencia de las peticiones GET que muestran datos, las peticiones POST están diseñadas para modificar el estado del servidor.

La anotación @PostMapping nos permite mapear métodos de controlador específicamente para peticiones HTTP POST. Esta anotación es una especialización de @RequestMapping que simplifica la configuración y hace el código más legible.

Sintaxis básica de @PostMapping

Un método con @PostMapping sigue una estructura similar a los métodos GET, pero está preparado para recibir datos del cliente:

@Controller
public class UsuarioController {
    
    @PostMapping("/usuarios")
    public String crearUsuario() {
        // Lógica para crear usuario
        return "redirect:/usuarios";
    }
}

La principal diferencia radica en que los métodos POST suelen procesar información enviada desde formularios o aplicaciones cliente, por lo que necesitan mecanismos para capturar estos datos.

Recepción de datos con @RequestParam

Para capturar datos enviados desde un formulario HTML, utilizamos @RequestParam. Esta anotación nos permite extraer parámetros individuales de la petición:

@PostMapping("/usuarios/crear")
public String procesarUsuario(
    @RequestParam String nombre,
    @RequestParam String email,
    @RequestParam int edad) {
    
    // Procesar los datos recibidos
    System.out.println("Usuario: " + nombre + ", Email: " + email);
    
    return "redirect:/usuarios";
}

También podemos hacer parámetros opcionales y establecer valores por defecto:

@PostMapping("/productos")
public String crearProducto(
    @RequestParam String nombre,
    @RequestParam(defaultValue = "0") double precio,
    @RequestParam(required = false) String descripcion) {
    
    // La descripción puede ser null si no se envía
    if (descripcion == null) {
        descripcion = "Sin descripción";
    }
    
    return "productos/confirmacion";
}

Trabajo con objetos de modelo

En lugar de capturar parámetros individuales, Spring Boot puede mapear automáticamente los datos del formulario a objetos Java. Esto se conoce como binding de datos:

public class Usuario {
    private String nombre;
    private String email;
    private int edad;
    
    // Constructores, getters y setters
    public Usuario() {}
    
    public String getNombre() { return nombre; }
    public void setNombre(String nombre) { this.nombre = nombre; }
    
    public String getEmail() { return email; }
    public void setEmail(String email) { this.email = email; }
    
    public int getEdad() { return edad; }
    public void setEdad(int edad) { this.edad = edad; }
}

El controlador puede recibir directamente el objeto mapeado:

@PostMapping("/usuarios/registro")
public String registrarUsuario(Usuario usuario, Model model) {
    // Spring mapea automáticamente los campos del formulario
    System.out.println("Registrando: " + usuario.getNombre());
    
    // Agregar el usuario al modelo para la vista
    model.addAttribute("usuarioCreado", usuario);
    
    return "usuarios/exito";
}

Redirecciones después de POST

Una buena práctica en aplicaciones web es redirigir después de procesar una petición POST. Esto evita que el usuario pueda reenviar accidentalmente el formulario al actualizar la página:

@PostMapping("/tareas")
public String crearTarea(@RequestParam String titulo, 
                        @RequestParam String descripcion) {
    
    // Procesar la nueva tarea
    System.out.println("Nueva tarea: " + titulo);
    
    // Redirigir a la lista de tareas
    return "redirect:/tareas";
}

También podemos redirigir con parámetros para mostrar mensajes de confirmación:

@PostMapping("/contacto")
public String enviarMensaje(@RequestParam String nombre,
                           @RequestParam String mensaje,
                           RedirectAttributes redirectAttributes) {
    
    // Procesar el mensaje
    System.out.println("Mensaje de " + nombre + ": " + mensaje);
    
    // Agregar mensaje flash para la siguiente vista
    redirectAttributes.addFlashAttribute("exito", 
        "Mensaje enviado correctamente");
    
    return "redirect:/contacto";
}

Manejo de errores básico

Los métodos POST deben estar preparados para manejar errores de validación o procesamiento:

@PostMapping("/login")
public String procesarLogin(@RequestParam String usuario,
                           @RequestParam String password,
                           Model model) {
    
    // Validación simple
    if (usuario.isEmpty() || password.isEmpty()) {
        model.addAttribute("error", "Usuario y contraseña son obligatorios");
        return "login"; // Volver al formulario
    }
    
    // Simular validación de credenciales
    if (!"admin".equals(usuario) || !"123".equals(password)) {
        model.addAttribute("error", "Credenciales incorrectas");
        return "login";
    }
    
    // Login exitoso
    return "redirect:/dashboard";
}

Esta aproximación permite mostrar mensajes de error directamente en el formulario, manteniendo una experiencia de usuario fluida y proporcionando retroalimentación clara sobre los problemas encontrados.

Aprende SpringBoot online

Otras lecciones de SpringBoot

Accede a todas las lecciones de SpringBoot y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.

Introducción A Spring Boot

Spring Boot

Introducción Y Entorno

Spring Boot Starters

Spring Boot

Introducción Y Entorno

Inyección De Dependencias

Spring Boot

Introducción Y Entorno

Crear Proyecto Con Spring Initializr

Spring Boot

Introducción Y Entorno

Crear Proyecto Desde Visual Studio Code

Spring Boot

Introducción Y Entorno

Controladores Spring Mvc

Spring Boot

Spring Mvc Con Thymeleaf

Vista En Spring Mvc Con Thymeleaf

Spring Boot

Spring Mvc Con Thymeleaf

Controladores Spring Rest

Spring Boot

Spring Mvc Con Thymeleaf

Open Api Y Cómo Agregarlo En Spring Boot

Spring Boot

Spring Mvc Con Thymeleaf

Servicios En Spring

Spring Boot

Spring Mvc Con Thymeleaf

Clientes Resttemplate Y Restclient

Spring Boot

Spring Mvc Con Thymeleaf

Rxjava En Spring Web

Spring Boot

Spring Mvc Con Thymeleaf

Métodos Post En Controladores Mvc

Spring Boot

Spring Mvc Con Thymeleaf

Métodos Get En Controladores Mvc

Spring Boot

Spring Mvc Con Thymeleaf

Formularios En Spring Mvc

Spring Boot

Spring Mvc Con Thymeleaf

Crear Proyecto Con Intellij Idea

Spring Boot

Spring Mvc Con Thymeleaf

Introducción A Los Modelos Mvc

Spring Boot

Spring Mvc Con Thymeleaf

Layouts Y Fragmentos En Thymeleaf

Spring Boot

Spring Mvc Con Thymeleaf

Estilización Con Bootstrap Css

Spring Boot

Spring Mvc Con Thymeleaf

Gestión De Errores Controlleradvice

Spring Boot

Spring Mvc Con Thymeleaf

Estilización Con Tailwind Css

Spring Boot

Spring Mvc Con Thymeleaf

Introducción A Controladores Rest

Spring Boot

Spring Rest

Métodos Get En Controladores Rest

Spring Boot

Spring Rest

Métodos Post En Controladores Rest

Spring Boot

Spring Rest

Métodos Delete En Controladores Rest

Spring Boot

Spring Rest

Métodos Put Y Patch En Controladores Rest

Spring Boot

Spring Rest

Gestión De Errores Restcontrolleradvice

Spring Boot

Spring Rest

Creación De Entidades Jpa

Spring Boot

Spring Data Jpa

Asociaciones De Entidades Jpa

Spring Boot

Spring Data Jpa

Repositorios Spring Data

Spring Boot

Spring Data Jpa

Métodos Find En Repositorios

Spring Boot

Spring Data Jpa

Inserción De Datos

Spring Boot

Spring Data Jpa

Actualizar Datos De Base De Datos

Spring Boot

Spring Data Jpa

Borrar Datos De Base De Datos

Spring Boot

Spring Data Jpa

Consultas Jpql Con @Query En Spring Data Jpa

Spring Boot

Spring Data Jpa

Api Query By Example (Qbe)

Spring Boot

Spring Data Jpa

Api Specification

Spring Boot

Spring Data Jpa

Repositorios Reactivos

Spring Boot

Spring Data Jpa

Configuración Base De Datos Postgresql

Spring Boot

Spring Data Jpa

Configuración Base De Datos Mysql

Spring Boot

Spring Data Jpa

Introducción A Jpa Y Spring Data Jpa

Spring Boot

Spring Data Jpa

Configuración Base De Datos H2

Spring Boot

Spring Data Jpa

Testing Unitario De Componentes Y Servicios

Spring Boot

Testing Con Spring Test

Testing De Repositorios Spring Data Jpa

Spring Boot

Testing Con Spring Test

Testing Controladores Spring Mvc Con Thymeleaf

Spring Boot

Testing Con Spring Test

Testing Controladores Rest Con Json

Spring Boot

Testing Con Spring Test

Testing De Aplicaciones Reactivas Webflux

Spring Boot

Testing Con Spring Test

Testing De Seguridad Spring Security

Spring Boot

Testing Con Spring Test

Testing Con Apache Kafka

Spring Boot

Testing Con Spring Test

Introducción Al Testing

Spring Boot

Testing Con Spring Test

Introducción A Spring Security

Spring Boot

Seguridad Con Spring Security

Seguridad Basada En Formulario

Spring Boot

Seguridad Con Spring Security

Registro De Usuarios En Api Rest

Spring Boot

Seguridad Con Spring Security

Login De Usuarios En Api Rest

Spring Boot

Seguridad Con Spring Security

Validación Jwt En Api Rest

Spring Boot

Seguridad Con Spring Security

Autenticación Jwt Completa En Api Rest

Spring Boot

Seguridad Con Spring Security

Seguridad Jwt En Api Rest Reactiva Spring Webflux

Spring Boot

Seguridad Con Spring Security

Autenticación Y Autorización Con Anotaciones

Spring Boot

Seguridad Con Spring Security

Fundamentos De Autenticación Oauth

Spring Boot

Seguridad Con Spring Security

Autenticación Oauth Con Github

Spring Boot

Seguridad Con Spring Security

Testing Con Spring Security Test

Spring Boot

Seguridad Con Spring Security

Autenticación Oauth En Api Rest

Spring Boot

Seguridad Con Spring Security

Introducción A Spring Webflux

Spring Boot

Reactividad Webflux

Spring Data R2dbc

Spring Boot

Reactividad Webflux

Controlador Reactivo Basado En Anotaciones

Spring Boot

Reactividad Webflux

Controlador Reactivo Basado En Funciones

Spring Boot

Reactividad Webflux

Operadores Reactivos Básicos

Spring Boot

Reactividad Webflux

Operadores Reactivos Avanzados

Spring Boot

Reactividad Webflux

Cliente Reactivo Webclient

Spring Boot

Reactividad Webflux

Introducción E Instalación De Apache Kafka

Spring Boot

Mensajería Asíncrona

Crear Proyecto Con Apache Kafka

Spring Boot

Mensajería Asíncrona

Creación De Producers

Spring Boot

Mensajería Asíncrona

Creación De Consumers

Spring Boot

Mensajería Asíncrona

Kafka Streams En Spring Boot

Spring Boot

Mensajería Asíncrona

Integración Con Angular

Spring Boot

Integración Frontend

Integración Con React

Spring Boot

Integración Frontend

Integración Con Vue

Spring Boot

Integración Frontend

Accede GRATIS a SpringBoot y certifícate

Ejercicios de programación de SpringBoot

Evalúa tus conocimientos de esta lección Métodos POST en controladores MVC con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.

En esta lección

Objetivos de aprendizaje de esta lección

  • Comprender el propósito y uso de los métodos POST en aplicaciones web MVC.
  • Aprender a utilizar la anotación @PostMapping para mapear peticiones POST en controladores.
  • Capturar datos enviados desde formularios mediante @RequestParam y gestionar parámetros opcionales.
  • Realizar binding de datos a objetos Java para simplificar la recepción de información.
  • Implementar redirecciones y manejo básico de errores tras procesar peticiones POST.