2

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 オブジェクトに適切にシリアル化されます。

これを行うには、ジャクソンで特別なデシリアライザーを作成する必要がありますか?

4

1 に答える 1

1

以前に複雑なオブジェクトが正常にシリアル化されたとおっしゃっていますが、Spring構成ファイルは問題なく、Jacksonは適切に構成されていると思います。MyFormクラス用に個別のシリアライザー/デシリアライザーを作成する必要はないと思います。

たとえば、ユーザーが空でないhrefを持つリンクをクリックしたときに、jQuery AJAX呼び出しを行った場合、400エラーの「不正な要求」が発生する可能性があるため、ブラウザーはデフォルトのアクションを実行しようとします。その場合、「application / json」を送信しようとしているにもかかわらず、リクエストヘッダーのタイプが「text/html」であることがわかります。

于 2012-09-10T15:06:41.650 に答える