2016-12-27 10 views
0

AngularJSからPOST呼び出しでSpringコントローラに複数のリストを渡そうとしています。私がSpringのコントローラでうまく動作するが、AngularからSpringへ複数のリストを送る最良の方法を知りたいと思っています。私はAngularJSからSpring Controllerへ複数の配列を渡す方法

$scope.formData.push(Alist); 
$scope.formData.push(Blist); 

が、私は以下のような何かを得る有効であると考えている以下のように私は同じアプローチを通じてなく、プッシュを使用して複数のリストを送信しようとすると、それは春のコントローラで受信され

$scope.formData = []; 
var AList = []; 
AList.push({'a': 1, 'b' :2}); 
$scope.formData = AList; 
$http.post('saveData', $scope.formData).success(function(resp){}); 

Spring Controllerで。

[[ {a=1, b=2}, {a=3, b=4} ]] 

これをSpring Controllerでどのように反復し、それを私のドメインオブジェクトに格納しますか?

は、これは正しいアプローチですかあなたのフロントエンドのアプローチが正しい

+0

これはうんざりです。あなたは何を送ろうとしますか?何のリスト?あなたのAlistまたはBlistはリスト(配列の意味で)ではなく、キー値マップ(または単純なもの:オブジェクト)です。オブジェクトのリストを送信しますか?ドメインオブジェクトはどのように見えますか? –

+0

それが正しい、私はドメインオブジェクトのリストを送信したい。ドメインオブジェクトにはフィールドaとbが含まれていると仮定できます。私が何をしたか は私が[] objDetail その後、私はJSONArrayを使用してそれを反復し、[OK]を – CrazyMac

+0

を必要に応じて、私は値を取得することができた、今私が見るオブジェクト@RequestBodyオブジェクト のそれのような単純な配列を受け取っています。私は自分の答えを投稿しました。 –

答えて

1

を行うに任意のより良い方法はあります。空の配列を作成し、必要な数だけオブジェクトをプッシュしてサーバーにポストするだけです。

//Create an empty array 
$scope.formData = []; 

//Push as many objects as you need 
$scope.formData.push({'a' : 1, 'b' : 2}); 
$scope.formData.push({'a' : 3, 'b' : 4}); 

//Post it to server 
$http.post('saveData', $scope.formData).success(function(resp){ 
    //handle response 
}); 

しかし、あなたの春側は改善することができます。オブジェクトの配列(Object[])は、型が安全でなく、エラーが発生しやすいため、一般的に推奨されていません。可能であれば、パラメータ化されたコレクション(Java Collections Framework)に置き換える必要があります。

次の手順を適用することができ、あなたの場合は

受け取ったJSONオブジェクトに対応して、あなたのドメインオブジェクトまたはDTOのクラスを作成します。

public class MyDomainObject { 

    private Integer a; 
    private Integer b; 

    public MyDomainObject(){ } 

    //getters and setters omitted 

} 

は、その後、あなたのエンドポイント法で Object[]から List<MyDomainObject>@RequestBodyタイプを切り替えます。

@RequestMapping(path = "/saveDate", method = RequestMethod.POST) 
public void postDomainObjects(@RequestBody List<MyDomainObject> myDomainObjects){ 

    //Do some business logic. 
    //i.e. pass further to service or save to database via repository 

} 

そして、角度からのjsonオブジェクトの正確なJava表現であるオブジェクトのリストを受け取ります。

for (MyDomainObject obj : myDomainObjects) { 

    //do something with each object. 

    //i.e. print value of "a" field 
    System.out.println("Value of a: " + obj.getA()); 
} 

またはのJava 8の場合のストリーム使用:

//Apply some filtering, mapping or sorting to your collection. 

//i.e. count sum of "a" field values. 
int sumOfAFields = myDomainObjects.stream() 
    .mapToInt(o -> o.getA()) 
    .sum(); 

注:上記の をあなたはforeachの演算子を使用して、たとえば、標準のJavaの方法でリストを反復可能性解決策は、オブジェクトマッパーを設定している場合に機能します。 Web起動プログラムでSpringブートを使用すると、無料で入手できます。標準的なSpringプロジェクト(独自の設定で)では、プロジェクトのクラスパスにjacksonライブラリを組み込み、設定クラスまたはxmlにObjectMapper beanを登録する必要があります。

+0

確かに、私はこれを試し、私の応答を投稿します – CrazyMac

関連する問題