从浏览器中的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 ""; }