我想使用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<String> a = null; // is it something like this?
}
这样做的正确方法是什么?谢谢!
答案 0 :(得分:31)
您可以从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中进行的。
答案 1 :(得分:5)
将这些数据传递给Spring MVC控制器非常简单,因为您要记住从字符串中解析数据。因此,如果您想在控制器中获取数组/列表 - 传递数组的字符串化版本:
public String method(
@RequestParam(value = "stringParam") String stringParam,
@RequestParam(value = "arrayParam") List<String> arrayParam) {
...
}
和jQuery相应的javascript就像:
$.post("/urlToControllerMethod",
{
"stringParam" : "test",
"arrayParam" : [1, 2, 3, "test"].toString()
}
);
注意:参数类型
List<String> arrayParam
也可以替换为等效的数组
String[] arrayParam
答案 2 :(得分:2)
如果你使用的是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);
}
}
检查这对你有帮助吗?
干杯!
答案 3 :(得分:1)
我最终这样做并且有效
在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
公共类MyData {
private ArrayList a;
}
然后在控制器中
@RequestMapping(value = "/repair_info", method = RequestMethod.POST)
public ModelAndView myControl(MyData myData) {
// get data with myData object
}
答案 4 :(得分:0)
经过全面测试的解决方案
$.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 "";
}