ARCmop Java Programacion Solaris Linux

Java-linux-programacion

Spring: Enviando Objeto JSON desde el Cliente al Servidor, con JQuery

Posted by Cmop en diciembre 20, 2010

Hola a todos, bueno ahora que regreso mi AFE de su viaje, he decidido colocar otra entrada pequeña, acerca de como enviar un objeto JSON, desde el cliente al servidor con Spring.

Para lograr esta faena debemos usar la libreria jackson-json en el servidor, la cual será la encargada de detectar que se ha enviado un objeto tipo JSON y se encargará de empatarlo con la clase que le proporcionemos, para ello debemos implementar algunos beans, en mi caso los he colocado en el dispatcher.xml, ya vimos en entradas anteriores que podemos crear otro archivo de configuración y colocar luego la referencia en el web.xml. Además de usar el JSON en el cliente.

    <mvc:annotation-driven />

   <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">
        <property name="prefixJson" value="true"/>
    </bean>

    <bean name="personita" class="controlador.ControladorPersona"/> <!-- Controlador de Formulario-->
    <bean name="miajax" class="controlador.ControladorAjax" /> <!-- Controlador de Peticion AJAX JSON-->

Además debemos tener una funcion adicional, la cual es serializeObject(), la cual será:

$.fn.serializeObject = function() {
	var o = {};
	var a = this.serializeArray();
	$.each(a, function() {
		if (o[this.name]) {
			if (!o[this.name].push) {
				o[this.name] = [o[this.name]];
			}
			o[this.name].push(this.value || '');
		} else {
			o[this.name] = this.value || '';
		}
	});
	return o;
};

También puede bajarse desde aqui.

Ahora el controlador de la petición que debe tener:
ControladorAjax.java

package controlador;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 *
 * @author Martin
 */
@Controller
@RequestMapping(value = "/persona.htm")
public class ControladorAjax {
    @RequestMapping(method = RequestMethod.POST)
    public
    @ResponseBody
    String prueba(@RequestBody Persona persona) {
        return "Llego: " + persona.getApellidos() + " - " + persona.getNombre() + " - " + persona.getEdad();
    }
}

Bueno aqui podemos ver que ,@RequestBody nos permite capturar el objeto.
Ahora el script para el envío desde el cliente:

        <script type="text/javascript">
            $("#frm_persona").submit(function(){
                var var_persona=$(this).serializeObject();
                $.ajax({
                    type: 'POST',
                    contentType: 'application/json',
                    data: JSON.stringify(var_persona),
                    //dataType: 'json',
                    url: "persona.htm",
                    success: function(datar){
                        $("#servidor").html(datar);
                    }
                });
                return false; //Esto anula el evento Submit()
            });
        </script>

Con esto, ya podemos enviar un objeto JSON al servidor usando Spring.

Ajunto el WARen Netbeans: springAjaxJSONJackson.war

Adjunto el Proyecto del ejemplo (Netbeans 6.9.1): springAjaxJSONJackson.rar

Obsérvese que aparece comentada una línea: //dataType: ‘json’ , la he puesto así porque en los test que estuve haciendo, si no comento esa línea se me anula la función posterior-respuesta-ajax, osea  $(“#servidor”).html(datar);

Colocaré el video que ilustra esta situación:

Saludos a todos, espero haber colaborado en algo.

AFE corazon!!!

Una respuesta to “Spring: Enviando Objeto JSON desde el Cliente al Servidor, con JQuery”

  1. Could I actually uncover you happen to be by Queensland?
    You will be understood as a Aussie :4)

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: