SpringMVC y peticiones asincronas

Spring es un framework para el desarrollo de aplicaciones escritas en java. Está formado por distintos módulos o componentes que nos permiten desarrollar diferentes tipos de productos. Algunos de ellos son:

  • SpringBatch : módulo para aplicaciones con un gran volumen de datos.
  • SpringSecurity: módulo para la autenticación de la aplicación (LDAP, permisos, roles ..)
  • SpringCloud: módulo para entornos distribuidos.

Podeis consultar todos los módulos que ofrece en su página web.

El módulo que me interesa tratar es SpringMVC. Es un módulo que nos facilita el desarrollo de aplicaciones web siguiendo el patrón MVC (Model- View-Controller).

SpringMVC

El usuario realiza una petición que es recogida por «DispatchServlet» y enviada al Controller adecuado.

El controller realiza los cambios necesarios sobre el modelo y envia el resultado a la vista.

En concreto en este artículo, quiero enseñaros como podemos hacer peticiones asíncronas desde la vista y recogerlo correctamente en el Controller de SpringMVC.

Imaginaos que tenemos el siguiente caso. Quiero enviar una serie de datos, procesar la peticion en el servidor y recargar un componente de la vista con ellos

SpringMVC

Peticion Ajax

Vamos a realizar una peticion Ajax, que envie datos en formato json. Para ello hay que tener en cuenta los siguientes parámetros

  • contentType: tipo de datos que envio
  • data: dato que envio
  • dataType: tipo de dato que espero recibir del Controller
  • url: peticion que realizo al controller
$.ajax(
   { url: '/peticionAsincrona',
     type: 'GET'
     dataType: 'json', 
     contentType: 'json',
     data:{"valor1" : valor};
     success: function(respuesta) {
        alert("peticion correcta")
     }
    }
);

Controller SpringMVC

Vamos ahora a ver como sería el Controller que recibiría la petición

@RequestMapping(method = RequestMethod.GET)
    @ResponseBody
    public Objeto2 getPeticion(@RequestBody Objeto1 obj) { 
...
return obj2; } 

Importante fijarnos en las siguientes anotaciones

  • @RequestBody: con esta anotación, estamos indicando al Controller que va a recibir datos en formato json y debe convertirlos en un objeto
  • @ResponseBody: con esta anotación, estamos indicando al Controller que queremos devolver algo en formato json y que por tanto debe convertir el objeto que devolvemos en json

En Resumen …

Resumiendo, cuando hagamos peticiones Ajax desde la vista y queramos que Spring recoja los datos y nos lo relacione con nuestro modelo debemos usar contentType, dataType, RequestBody y ResponseBody de forma coherente.

Captura de pantalla 2016-05-08 a las 23.45.00

En caso contrario, la petición Ajax no se realizará, devolviendonos un error 500 («Error interno del servidor.»).

Espero que este artículo os ayude a trabajar de forma más eficiente y os evite muchos dolores de cabeza.

 

Post By Rocio Muñoz (37 Posts)

Ingeniera Informatica. Dicen que todos los niños nacen con un pan debajo del brazo ... Yo creo que llevaba un ordenador. Trabajo como programadora en Cic en entornos Java. Apasionada del mundo web y la innovacion social.

Connect

One Response to “SpringMVC y peticiones asincronas”