1

次のようにJSONをサーバーに投稿したとしましょう:

{
    warFile: {name: "test1", dependencies: [test0, test2]},
    param: {build: true, test: true}
}

そして、私は次のように3つのクラスを持っています:

public class WarFile{
   private String name:
   private String[] dependencies;
   public void setName(){...};
   public String getName(){...};
   public void setDependencies(){...};
   public String[] getDependencies(){...};
}

public class Param{
   private boolean build;
   private boolean test;
   public void setBuild(){...};
   public boolean isBuild(){...};
   public void setTest(){...};
   public boolean isTest(){...};
}

public class Command{
    private WarFile warFile;
    private Param param;
    private void setWarFile(){...};
    private WarFile getWarFile(){...};
    private void setParam(){...};
    private Param getParam(){...};
}

以下のようにコントローラ:

@RequestMapping(value = "/test.ajax", method = RequestMethod.POST)
public @ResponseBody
BuildResult buildWar(@RequestBody Command cmd) {
    return logic.build(cmd.getWarFile(), cmd.getParam());
}

コマンドのandはプリミティブ型ではないためwarFileparam常に次のエラーが発生します。

The request sent by the client was syntactically incorrect.

Command のすべてのプロパティがプリミティブ型であれば問題はないと確信しています。しかし、なぜこのエラーが発生したのでしょうか? つまり、オブジェクトはシンプルで、カスタム デシリアライザーを記述する必要はありません。

4

2 に答える 2

0

「クライアントに送信されたリクエストは構文的に正しくありません」は、送信したリクエストの内容に何か問題があることを意味し、必ずしもコントローラーまたは Spring 構成に問題があるとは限りません。まず、JSON が有効ではありません。Jackson は、JSON をそれが表すオブジェクトに適切にマップできません。そのはず:

{
    "warFile": {
        "name": "test1",
        "dependencies": ["test0", "test2"]
    },
    "param": {
        "build": true,
        "test": true
    }
}

次に、コンテンツ タイプが application/json であることを確認します。最後に、Command オブジェクトにプライベート getter/setter があり、setter にフィールド パラメータがないのはなぜですか?

于 2013-10-22T03:46:00.067 に答える
0

リクエスト マッピングは /test.ajax または /test で html<form>ですか?

ジャクソンマッパーのjar依存関係を追加しましたか? はいの場合、次の解決策は引用符をエスケープすることです。これは Spring MVCに役立つかもしれません:クライアントから送信されたリクエストは構文的に正しくありませんでした

HTTP ステータス 400 の取得 - クライアントから送信されたリクエストの構文が正しくありません: curl を使用して json リクエストをポスト/プットします

于 2013-10-22T03:21:42.607 に答える