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 solicitud POST.

✅ ¿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 GET /buscar?nombre=Juan
📝 Form-data (body con application/x-www-form-urlencoded) 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