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?
}
これを行う正しい方法は何ですか?ありがとう!
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 side(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 {
....
}
[〜#〜] edit [〜#〜]
@RequestParam
注釈を変更して、myArray
の代わりにmyArray[]
を使用するようにしました。この変更は、この回答が最初に投稿された後、Springで行われたようです。
データが文字列から解析されていることを念頭に置いている場合、そのようなデータを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
myArray[]
を使用しない限り、Vivin Paliathは機能しません
public String controllerMethod(@RequestParam(value="myArray[]") Integer[] myArray){
...
}
あなたが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'); }
_
});
スプリングコントローラーコード
@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側、ロンボクを使用してデータを受信するクラスを取得する
@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<Integer> myArray){
System.out.println("My Array"+myArray.get(0));
return "";
}