Подтвердить что ты не робот

Передайте данные массива из javascript в браузере на spring контроллер mvc с помощью ajax

Я хотел бы передать массив из javascript в веб-браузере в контроллер Spring MVC с помощью AJAX

В javascript у меня есть

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);
    }
}); 

В Java я хотел бы создать класс для приема данных из AJAX, и я создаю класс для приема данных

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?
}

Каков правильный способ сделать это? Спасибо!

4b9b3361

Ответ 1

Вы можете сделать это со стороны 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);
    }
}); 

Затем на стороне Java (в Spring 3), предполагая, что этот метод отображается на /myurl:

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

Я считаю, что следующее также будет работать:

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

Spring достаточно умен, чтобы понять, как сделать привязку.

Для нескольких массивов вы можете просто иметь объект команды:

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

    ...
    ...
}

Затем со стороны 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);
    }
}); 

На стороне Java вы можете связать с помощью @ModelAttribute:

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

ИЗМЕНИТЬ

Изменена аннотация @RequestParam, чтобы использовать myArray[] вместо myArray, поскольку это изменение, по-видимому, было сделано в Spring после того, как этот ответ был впервые опубликован.

Ответ 2

Vivin Paliath не работает, если вы не используете myArray[]

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

Ответ 3

Очень просто передавать такие данные в контроллер Spring MVC, когда вы помните, что данные анализируются из строки. Поэтому, если вы хотите получить массив/список в контроллере - передайте стробированную версию массива:

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

и соответствующий javascript с jQuery будет выглядеть следующим образом:

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

Примечание: тип параметра

List<String> arrayParam

может быть также заменен эквивалентом массива

String[] arrayParam

Ответ 4

Если вы используете spring mvc 4, то ниже будет лучший подход

Код JQuery

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

//ajax code

$.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'); }
});

Spring код контроллера

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

проверить это поможет вам или нет!

Ура!

Ответ 5

В итоге я делаю это, и он работает

В js,

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


$.ajax({
    type : "POST",
    url : "/myurl",
    data : "a="+a,  //multiple array, just add something like "&b="+b ...
    success : function(response) {
       // do something ... 
    },
    error : function(e) {
       alert('Error: ' + e);
    }
}); 

java side, получите класс для приема данных, используя lombok

@Setter @Getter   открытый класс MyData {       private ArrayList a;
  }

затем в контроллере

@RequestMapping(value = "/repair_info", method = RequestMethod.POST)
public ModelAndView myControl(MyData myData) {
    // get data with myData object
}