22

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?
}

これを行う正しい方法は何ですか?ありがとう!

4

6 に答える 6

34

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 {
    ....
}

編集

この変更は、この回答が最初に投稿された後に Spring で行われたように見えるため、単に の代わりに@RequestParam使用するように注釈を変更しました。myArray[]myArray

于 2013-07-10T00:04:47.753 に答える
6

使用しない限り、Vivin Paliath は機能しません。myArray[]

public String controllerMethod(@RequestParam(value="myArray[]") Integer[] myArray){
    ...
}
于 2015-04-13T08:57:40.023 に答える
6

データが文字列から解析されることを念頭に置いている場合、そのようなデータを 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
于 2015-01-19T17:43:45.563 に答える
2

spring mvc 4 を使用している場合は、以下が最適なアプローチになります。

Jクエリコード

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

これが役立つかどうかを確認してください!

乾杯!

于 2016-03-23T09:59:54.380 に答える