El otro día queria realizar algo en apariencia sencillo y era pasar un único parámetro (no un objeto) a un método de Spring MVC con una llamada Post usando Ajax. En apariencia sencillo, pero al final solo resulto en apariencia.
Sabia hacerlo a traves de una llamada GET. Aquí un ejemplo:
@GetMapping( value = "/book/review/{id}" ) public String review( final Model model, @PathVariable( "id" ) final Integer id){ //... }
Pero yo queria pasar el único dato de forma oculta.
Sabia hacerlo enviando un objeto y con la ayuda de @RequestBody. Aquí un ejemplo:
@PostMapping public ResponseEntity<String> create( final HttpServletRequest request, @RequestBody final BookVo valueObject ) { //... }
Pero no creia crearme un objeto para un único parámetro.
Así que lo estuve intetando con la anotacion '@RequestParam', sin tener el exito deseado. Y por más que buscaba en internet no encontraba una solucion exacta a mi problema. Hasta que encontre esta web. Cualquiera sabe si es chino o coreano, lo bueno es que el código esta en ingles y ahí es donde se encuentra la solución: Usar '@RequestBody Map<String,Object> params'. Este código nos permitirá crear una mapa de valores enviados en la llamada y nos evita construir un objeto específico. Aquí el ejemplo completo:
@PostMapping( value = "/book/search" ) public String findByTag( final Model model, @RequestBody final Map<String, Object> params ) { String searchText = params.get( "searchText" ).toString(); //... }
No hay comentarios:
Publicar un comentario