jquery consume - Pase los datos de la matriz desde javascript en el navegador a Spring mvc controller usando ajax





rest web (6)


Puedes hacer esto desde el lado de JavaScript:

$.ajax({
    type : "POST",
    url : "/myurl",
    data : {
        myArray: a //notice that "myArray" matches the value for @RequestParam
                   //on the Java side
    },
    success : function(response) {
       // do something ... 
    },
    error : function(e) {
       alert('Error: ' + e);
    }
}); 

Luego, en el lado de Java (en la primavera 3), suponiendo que este método está mapeado por /myurl :

public String controllerMethod(@RequestParam(value="myArray[]") Integer[] myArray){
    ....
}

Creo que lo siguiente también funcionará:

public String controllerMethod(@RequestParam(value="myArray[]") List<Integer> myArray){
    ....
}

Spring es lo suficientemente inteligente como para descubrir cómo hacer el enlace.

Para matrices múltiples, es posible que desee tener un objeto de comando:

public class MyData {
    private List<Integer> firstArray;
    private List<Integer> secondArray;
    private List<Integer> thirdArray;

    ...
    ...
}

Luego, en el lado de JavaScript:

$.ajax({
    type : "POST",
    url : "/myurl",
    data : {            
        myData: {
           "firstArray": firstArray,
           "secondArray": secondArray,
           "thirdArray": thirdArray
        }            
    },
    success : function(response) {
       // do something ... 
    },
    error : function(e) {
       alert('Error: ' + e);
    }
}); 

En el lado de Java, puede enlazar usando @ModelAttribute :

public String controllerMethod(@ModelAttribute(value="myData") MyData myData) throws ParseException {
    ....
}

EDITAR

Se modificó la anotación @RequestParam para usar myArray[] lugar de solo myArray , ya que este cambio parece haberse realizado en Spring luego de que esta respuesta se publicó por primera vez.

Me gustaría pasar una matriz desde javascript en el navegador web a un controlador Spring MVC usando AJAX

En javascript, tengo

var a = [];
a[0] = 1;
a[1] = 2;
a[2] = 3;

// how about multiple arrays as well?

$.ajax({
    type : "POST",
    url : "/myurl",
    data : //not sure how to write this, ("a="+a), ?
    success : function(response) {
       // do something ... 
    },
    error : function(e) {
       alert('Error: ' + e);
    }
}); 

En Java, me gustaría crear una clase para recibir datos de AJAX, y creo una clase para recibir datos

package com.amazon.infratool.ui;

import lombok.Getter;
import lombok.Setter;


@Setter @Getter
public class RepairInfomationParameters {
//how to write this variable?
    List<String> a = null; // is it something like this?
}

¿Cuál es la forma correcta de hacer esto? ¡Gracias!




Vivin Paliath no funciona a menos que use myArray[]

public String controllerMethod(@RequestParam(value="myArray[]") Integer[] myArray){
    ...
}



Si está utilizando spring mvc 4, a continuación será el mejor enfoque

Código Jquery

var dataArrayToSend = []; dataArrayToSend.push("a"); dataArrayToSend.push("b"); dataArrayToSend.push("c");

// código ajax

$.ajax({ contentType: "application/json", type: "POST", data: JSON.stringify(dataArrayToSend), url: "/appUrl", success: function(data) { console.log('done'); }, error: function(jqXHR, textStatus, errorThrown) { console.log('error while post'); }
});

Código de controlador de primavera

@RequestMapping(value = "/appUrl", method = RequestMethod.POST) public @ResponseBody void yourMethod(@RequestBody String[] dataArrayToSend) { for (String data : dataArrayToSend) { System.out.println("Your Data =>" + data); } }

¡comprueba que esto te ayude o no!

¡Aclamaciones!




Es muy simple pasar tales datos al controlador Spring MVC, cuando se tiene en cuenta que los datos se están analizando desde una cadena. Entonces, si desea obtener una matriz / lista en el controlador, pase una versión codificada de la matriz:

public String method(
        @RequestParam(value = "stringParam") String stringParam,
        @RequestParam(value = "arrayParam") List<String> arrayParam) {
    ...
}

y el javascript correspondiente con jQuery sería como:

$.post("/urlToControllerMethod",
    {
        "stringParam" : "test",
        "arrayParam" : [1, 2, 3, "test"].toString()
    }
);

Nota: el tipo de parámetro

List<String> arrayParam

podría ser tan bien reemplazado con la matriz equivalente

String[] arrayParam



Solución completamente probada

$.ajax({
    type : "POST",
    url : "/myurl",
    data : {
        myArray: a //notice that "myArray" matches the value for @RequestParam
                   //on the Java side
    },
    success : function(response) {
       // do something ... 
    },
    error : function(e) {
       alert('Error: ' + e);
    }
}); 

@RequestMapping(value = "/save/", method = RequestMethod.POST)
    public String controllerMethod(@RequestParam(value="myArray[]") List<Integer> myArray){
        System.out.println("My Array"+myArray.get(0));
        return "";
    }



En estas situaciones, cuando tiene una API pública y desea métodos / propiedades privadas y públicas, siempre uso el Patrón del Módulo. Este patrón se hizo popular dentro de la biblioteca YUI, y los detalles se pueden encontrar aquí:

http://yuiblog.com/blog/2007/06/12/module-pattern/

Es realmente sencillo y fácil de comprender para otros desarrolladores. Para un ejemplo simple:

var MYLIB = function() {  
    var aPrivateProperty = true;
    var aPrivateMethod = function() {
        // some code here...
    };
    return {
        aPublicMethod : function() {
            aPrivateMethod(); // okay
            // some code here...
        },
        aPublicProperty : true
    };  
}();

MYLIB.aPrivateMethod() // not okay
MYLIB.aPublicMethod() // okay




javascript jquery ajax arrays spring-mvc