2016-05-24 18 views
0

Spring Controllerメソッドにヒットするajaxポストリクエストを作成しようとしています。このリクエストの1つはJavaScriptオブジェクトの配列vendorBillingDetailsです。これらのJavaScriptオブジェクトには一致するJaavaドメインクラスがあり、このドメインクラスにマップしたいと思います。これはSpring MVCができるはずのようですが、これまでのところ私はたった1つのリクエストパラメータでHTMLフォームを使っている例しか見つけられませんでした。JavaScriptオブジェクトの配列とSpringドメインのJavaドメインへのマッピングメソッド

以下は私のコントローラとajaxリクエストです。私がこれまでに試したことがすべて失敗したので、誰かがこれを正しくマップする方法を教えてくれるでしょう。

$.ajax({ 
    url : '/ui/clearBilling', 
    type : 'POST', 
    data : { "trackId": trackId, "vendorBillingDetails": vendorBillingDetails, "_csrf": csrf }, 
    async : true, 
    success : function(data) { 
      jqAlert("Selected item(s) were cleared"); 
    }, 
    fail: function(e) { 
     jqAlert("There was an error with the request"); 
    } 
}); 

});

@RequestMapping(value = "/clearBilling", method = RequestMethod.POST) 
public @ResponseBody String setClearVendorBillingPO(@RequestParam BigInteger trackId, @RequestParam(value = "vendorBillingDetails[]") List<VendorBillingDetail> vendorBillingDetails, HttpServletRequest request) { 

    //TODO stuff 

} 

答えて

1

私は似ていますが、一つだけJSONオブジェクトを送信することで何かをやったので、あなたは、あなたが気にすべてのそれらのリクエストパラメータを保持している別のオブジェクトにそれを微調整やラップする必要があります。 @RequestBodyアノテーションを使ってみてください。 AJAX呼び出しで

@RequestMapping(value = "/clearBilling", method = RequestMethod.POST) 
public @ResponseBody String setClearVendorBillingPO(@RequestBody List<VendorBillingDetail> vendorBillingDetails, HttpServletRequest request) { 

//TODO stuff 

} 

は、あなたがJSON.stringify()(json2.jsの一部)を使用することができます

$.ajax({ 
     url : "/ui/clearBilling", 
     type : "POST", 
     async : true, 
     data : JSON.stringify(vendorBillingDetails), 
     contentType : "application/json" 
    }); 
+0

これは私の他のtrackIdを入力パラメータとしても使えますか? – user2725919

+0

これは、trackIdとvendorBillingDetailsを保持するラッパーオブジェクトを作成する場合に有効です。 – bhietpas

+0

私は別々のparamsに関して確かに言うことができません。私は見直すために鉱山を変更して試験しなければならないだろう。 – bhietpas

0

これは動作しません。どういうわけか、オブジェクトの配列に対するRequestMappingは、コントローラの受信側でエラーになります。 JSON本体として送信してから、スプリング・コントローラーでアンマーシャルすることをお勧めします。

関連する問題