使用ajax将浏览器中的javascript中的数组数据传递给spring mvc控制器
我想使用AJAX将一个数组从web浏览器中的javascript传递到SpringMVC控制器 在javascript中,我有使用ajax将浏览器中的javascript中的数组数据传递给spring mvc控制器,javascript,jquery,ajax,arrays,spring-mvc,Javascript,Jquery,Ajax,Arrays,Spring Mvc,我想使用AJAX将一个数组从web浏览器中的javascript传递到SpringMVC控制器 在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), ?
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?
}
package com.amazon.infratool.ui;
进口龙目吸气剂;
进口龙目织机;
@Setter@Getter
公共类RepairInformationParameters{
//如何写这个变量?
List a=null;//是这样的吗?
}
正确的方法是什么?谢谢 您可以从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);
}
});
$.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端(在Spring 3中),假设此方法由/myurl
映射:
public String controllerMethod(@RequestParam(value="myArray[]") Integer[] myArray){
....
}
我相信以下措施也会奏效:
public String controllerMethod(@RequestParam(value="myArray[]") List<Integer> myArray){
....
}
在Java端,可以使用@modeldattribute
进行绑定:
public String controllerMethod(@ModelAttribute(value="myData") MyData myData) throws ParseException {
....
}
编辑
将
@RequestParam
注释更改为使用myArray[]
,而不是仅使用myArray
,因为此更改似乎是在首次发布此答案后于春季进行的。我最终完成了此操作,并且效果良好
在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{
专用阵列列表a;} 然后在控制器中
@RequestMapping(value = "/repair_info", method = RequestMethod.POST)
public ModelAndView myControl(MyData myData) {
// get data with myData object
}
将这些数据传递给SpringMVC控制器非常简单,因为您知道数据是从字符串解析的。因此,如果要在控制器中获取数组/列表,请传递该数组的字符串化版本:
public String method(
@RequestParam(value = "stringParam") String stringParam,
@RequestParam(value = "arrayParam") List<String> arrayParam) {
...
}
注意:参数类型
List<String> arrayParam
除非使用
myArray[]
public String controllerMethod(@RequestParam(value="myArray[]") Integer[] myArray){
...
}
如果您使用的是SpringMVC4,那么下面的方法将是最好的方法 Jquery代码
var dataArrayToSend=[];
dataArrayToSend.push(“a”);
dataArrayToSend.push(“b”);
dataArrayToSend.push(“c”)代码>
//ajax代码
$.ajax({
contentType:“应用程序/json”,
类型:“POST”,
数据:JSON.stringify(dataArrayToSend),
url:“/appUrl”,
成功:功能(数据){
console.log('done');
},
错误:函数(jqXHR、textStatus、errorshown){
log('post时出错');
}
});
弹簧控制器代码
@RequestMapping(value=“/appUrl”,method=RequestMethod.POST)
公共@ResponseBody
void yourMethod(@RequestBody String[]dataArrayToSend){
for(字符串数据:dataArrayToSend){
System.out.println(“您的数据=>”+数据);
}
}
检查这个是否对你有帮助
干杯 完全测试的溶液
$.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 "";
}
$.ajax({
类型:“POST”,
url:“/myurl”,
数据:{
myArray:a//注意,“myArray”与@RequestParam的值匹配
//在Java方面
},
成功:功能(响应){
//做点什么。。。
},
错误:函数(e){
警报('错误:'+e);
}
});
@RequestMapping(value=“/save/”,method=RequestMethod.POST)
公共字符串控制器方法(@RequestParam(value=“myArray[]”)列表myArray){
System.out.println(“我的数组”+myArray.get(0));
返回“”;
}
谢谢@vivin,多个阵列怎么样?数据:{myArray:a,myArray2:b,…}?myArray应该是类似“myArray”的字符串吗?@AlfredZhong我看到您使用的数组是int
s,这就是为什么我将其设置为Integer
。但是没有理由不能将其转换为String[]
或List
@alfredhong我修改了第二个示例,使用modeldattribute
而不是RequestParam
RequestParam
是用于原语的。我遇到了一个[object object]错误,我猜这与$ajex将数据转换为封面下的字符串时的数据有关?这似乎在我们的案例中也起作用,而Vivin的答案没有。看起来它是在spring的最新版本中更新的。我会更新我的答案。
String[] arrayParam
public String controllerMethod(@RequestParam(value="myArray[]") Integer[] myArray){
...
}
$.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 "";
}