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.
Fuentes y referencias
Documentación oficial y recursos externos para profundizar en SpringBoot
Documentación oficial de SpringBoot
Alan Sastre
Ingeniero de Software y formador, CEO en CertiDevs
Ingeniero de software especializado en Full Stack y en Inteligencia Artificial. Como CEO de CertiDevs, SpringBoot es una de sus áreas de expertise. Con más de 15 años programando, 6K seguidores en LinkedIn y experiencia como formador, Alan se dedica a crear contenido educativo de calidad para desarrolladores de todos los niveles.
Más tutoriales de SpringBoot
Explora más contenido relacionado con SpringBoot y continúa aprendiendo con nuestros tutoriales gratuitos.
Aprendizajes 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.
Cursos que incluyen esta lección
Esta lección forma parte de los siguientes cursos estructurados con rutas de aprendizaje