从浏览器中的javascript传递数组数据到使用ajax弹出mvc控制器

我想使用AJAX将数组从Web浏览器中的javascript传递给Spring MVC控制器

在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 a = null; // is it something like this? } 

这样做的正确方法是什么? 谢谢!

你可以从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 myArray){ .... } 

Spring很聪明,可以弄清楚如何进行绑定。

对于多个arrays,您可能只想拥有一个命令对象:

 public class MyData { private List firstArray; private List secondArray; private List 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中进行的。

除非你使用myArray[]否则Vivin Paliath不起作用

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

将数据传递给Spring MVC控制器非常简单,因为您要记住从字符串中解析数据。 因此,如果您想在控制器中获取数组/列表 – 传递数组的字符串化版本:

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

与jQuery对应的javascript就像:

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

注意:参数类型

 List arrayParam 

也可以用等效的数组替换

 String[] arrayParam 

如果您使用的是spring mvc 4,那么下面将是最好的方法

Jquery代码

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

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

Spring控制器代码

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

检查这有助于你!

干杯!

我最终做到了这一点并且有效

在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方面,使用lombok获取一个接收数据的类

@Setter @Getter public class MyData {private ArrayList a;
}

然后在控制器中

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

经过全面测试

 $.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 myArray){ System.out.println("My Array"+myArray.get(0)); return ""; }