Uso de @RequestParam en Spring
En esta entrada vamos a explorar el uso de @RequestParam en Spring en sus diferentes formas. El atributo @RequestParam junto a nuestros controladores en Spring nos permitirá realizar el paso de parámetros.
Vamos a ver las diferentes formas de pasar esta información.
Uso básico de @RequestParam
Vamos a ver el uso básico de requestParam cuando queremos recibir un parámetro de entrada a nuestra aplicación:
@GetMapping("/cars/car") @ResponseBody public String getCar(@RequestParam String id) { return "Car ID: " + id; }
En este caso únicamente especificamos la anotación @RequestParam sin decir nada más, y como defecto toma el id.
@RequestParam especificando el nombre del atributo
En las ocasiones en las queremos especificar el nombre del parámetro, por si usamos por ejemplo Spring sin Spring Boot (es raro pero se hace), o para algún tipo de compilación.
Para ello lo que hacemos es dentro de la anotación @RequestParam añadir el atributo name con el nombre del parámetro que queremos o podemos quitar el valor name que es el de por defecto en la anotación.
@PostMapping("/cars") @ResponseBody public String addCar(@RequestParam(name = "id") String carId) { return "ID: " + carId; }
Haciendo uso de @RequestParam con parámetros opcionales
Cuando hacemos uso de @RequestParam por defecto es obligatorio, es un valor requerido y en el caso en el que no esté informado fallara.
Para poder enviar parámetros cuando queramos sin que sean obligatorios podemos utilizar el atributo, dentro de la anotación @RequestParam, required = false.
@GetMapping("/cars/car") @ResponseBody public String getCars(@RequestParam(required = false) String id) { return "ID: " + id; }
En el caso en el que no se informe el atributo el valor será null, por ejemplo, en el caso anterior id será null, por lo que habrá que tener cuidado de usarlo sino queremos tener un null pointer.
El uso de required = true, es el valor por defecto.
Valor por defecto al usar @RequestParam
En muchas ocasiones, cuando programamos un endpoint con parámetros de entrada vamos a querer tener un valor por defecto cuando ese valor no es informado.
Para estos casos @RequestParam nos permite añadir el atributo defaultValue para asígnar al parámetro un valor por defecto.
@GetMapping("/cars/car") @ResponseBody public String getCars(@RequestParam(defaultValue = "12") String id) { return "ID: " + id; }
Mapear todos los parámetros con @RequestParam
Cuando nuestra petición tiene muchos parámetros, podemos mapear todas esas entradas en un Mapa de Java de manera que tendremos todas las variables como Clave y Valor.
@PostMapping("/cars/car") @ResponseBody public String getCarByParams(@RequestParam Map<String,String> carParams) { return "Parameters are " + carParams.entrySet(); }
Utilizar @RequestParam para múltiples valores de un parámetro
Hay en ocasiones que pasaremos para un único parámetro múltiples values, por ejemplo, podemos hacer lo siguiente:
cars/car?color=yellow,red,blue,white
Es decir, según lo anterior, vamos a querer todos los coches con esos colores. Es decir, si lo transformamos a java queremos algo así List<String>color. Y si lo transformamos a Spring haremos lo siguiente:
@GetMapping("/cars/car") @ResponseBody public String getCars(@RequestParam List<String> color) { return "Colors are " + color.toString(); }
Conclusión
En esta entrada hemos visto el Uso de @RequestParam en Spring para poder mapear nuestros parámetros de entrada de diferentes maneras.
Si necesitas más información puedes escribirnos un comentario o un correo electrónico a refactorizando.web@gmail.com o también nos puedes contactar por nuestras redes sociales Facebook o twitter y te ayudaremos encantados!