Requestparam
@RequestParam
📘 Guía práctica de @RequestParam en Spring MVC
🎯 ¿Qué es @RequestParam?
@RequestParam es una anotación de Spring MVC que se usa para extraer valores de parámetros enviados por el cliente, ya sea:
- Como query parameters en la URL (los más comunes),
- O como campos en un formulario tipo
application/x-www-form-urlencoded, que se envían en el cuerpo (body) de una solicitudPOST.
✅ ¿Dónde se usa?
Se usa dentro de un método @Controller o @RestController para obtener parámetros directamente como argumentos del método.
@GetMapping("/buscar")
public String buscar(@RequestParam String nombre) {
return "Buscando a: " + nombre;
}
📌 ¿Qué captura exactamente?
| Tipo de solicitud | ¿Lo captura @RequestParam? |
Ejemplo |
|---|---|---|
| 🔍 Query param | ✅ Sí | GET /buscar?nombre=Juan |
📝 Form-data (body con application/x-www-form-urlencoded) |
✅ Sí | Enviado desde un formulario HTML clásico con método POST |
| 📦 JSON en body | ❌ No | Para eso se usa @RequestBody |
| 📄 Multipart file | ❌ (aunque se puede con otras anotaciones como @RequestPart) |
🧪 Ejemplos prácticos
🧭 1. Capturar parámetro de la URL (query param)
@GetMapping("/saludo")
public String saludo(@RequestParam String nombre) {
return "Hola, " + nombre;
}
➡️ Acceso:
http://localhost:8080/saludo?nombre=Ana
📝 2. Capturar parámetro desde un formulario POST
Formulario HTML:
<form method="post" action="/enviar">
<input type="text" name="email" />
<button type="submit">Enviar</button>
</form>
Controlador:
@PostMapping("/enviar")
public String enviar(@RequestParam String email) {
return "Email recibido: " + email;
}
✔️ Spring extraerá el valor del campo email desde el cuerpo del formulario.
📌 3. Parámetros opcionales con valor por defecto
@GetMapping("/paginado")
public String paginado(
@RequestParam(defaultValue = "1") int pagina,
@RequestParam(defaultValue = "10") int tamano) {
return "Mostrando página " + pagina + " con " + tamano + " elementos";
}
➡️ Si no se envían pagina o tamano, se usarán los valores por defecto.
⚠️ 4. Parámetro obligatorio vs. opcional
@GetMapping("/producto")
public String producto(@RequestParam(required = false) String id) {
return (id != null) ? "Producto " + id : "Producto no especificado";
}
Si required = true (por defecto), y no se pasa el parámetro, Spring lanza una excepción.
🚫 Cuándo no usar @RequestParam
Usa @RequestBody cuando:
- Estás enviando JSON o XML como cuerpo de la solicitud
- Quieres mapear todo el contenido del body a un objeto Java
@PostMapping("/usuario")
public String crearUsuario(@RequestBody Usuario usuario) {
return "Nombre: " + usuario.getNombre();
}
✅ Conclusión rápida
| Situación | ¿Usar @RequestParam? |
|---|---|
Query params (?clave=valor) |
✅ Sí |
Formularios (application/x-www-form-urlencoded) |
✅ Sí |
JSON enviado en el body (application/json) |
❌ No → usa @RequestBody |
| Archivos adjuntos (multipart/form-data) | ❌ Usa @RequestPart / @RequestParam MultipartFile |