sábado, 3 de diciembre de 2016

Pasar un parametro desde una llamada Ajax Post a Spring MVC


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