spring mvc 3.1 を使用して、json 経由で複雑なオブジェクトを渡す方法を見つけようとしています。ノックアウト js も使用しているので、ko.toJSON を JSON.stringify と同等にします。
配備する
ここにajax呼び出しがあります:
$.ajax({
url: "/doAction",
type: "post",
data: ko.toJSON({"complexObjectA": ko.toJSON(self.complexObjectA()), "complexObjectB": ko.toJSON(self.complexObjectB()), "id": "", "text": ""}),
dataType: "json",
contentType: "application/json; charset=utf-8",
// callback handler that will be called on success
success: function (response, textStatus, jqXHR) {
//dosomething
},
// callback handler that will be called on error
error: function (jqXHR, textStatus, errorThrown) {
// log the error to the console
},
// callback handler that will be called on completion
// which means, either on success or error
complete: function () {
//dosomething
}
});
スプリング コントローラーのコードは次のようになります。
@RequestMapping(value = "/doAction", method = RequestMethod.POST)
@ResponseBody
public String doAction(@RequestBody MyForm form, HttpServletRequest request, HttpServletResponse response) {
MyForm は次のように定義されています。
public class MyForm {
private ComplexObjectA complexObjectA;
private ComplexObjectB complexObjectA;
private String id;
private String text;
適切なパブリック ゲッター/セッターを使用します。
この呼び出しを実行しようとすると、エラー 400 クライアントによって送信された要求が構文的に正しくありません () が表示されます。
複雑なオブジェクトは、どちらも json の get アーリーを介して取得され、オブジェクトから json および js オブジェクトに適切にシリアル化されます。
これを行うには、ジャクソンで特別なデシリアライザーを作成する必要がありますか?