Ajax を使用して @RequestBody の複数の変数を Spring MVC コントローラーに渡す
リクエスト本文の複数の変数を Spring に渡そうとする場合Ajax を使用する MVC コントローラーでは、バッキング オブジェクト内で変数を囲む必要があるかどうかという問題に直面する可能性があります。
元のクエリでは、次のアプローチを使用してこれを実現したいとの要望が示されています。
@RequestMapping(value = "/Test", method = RequestMethod.POST) @ResponseBody public boolean getTest(@RequestBody String str1, @RequestBody String str2) {}
JSON データは次のようになります:
{ "str1": "test one", "str2": "two test" }
しかし、作成者は代わりにホルダー オブジェクトを使用する必要性に直面しました:
@RequestMapping(value = "/Test", method = RequestMethod.POST) @ResponseBody public boolean getTest(@RequestBody Holder holder) {}
および付随する JSON:
{ "holder": { "str1": "test one", "str2": "two test" } }
ジレンマは、@RequestBody が単一のオブジェクトへのマッピングを必要とするため、リクエスト本文での複数のパラメーターの使用が困難になるという事実にあります。
ホルダー オブジェクトを使用する前述の回避策は有効な解決策ですが、 Map オブジェクトを使用した別のアプローチも利用できます。
@RequestMapping(value = "/Test", method = RequestMethod.POST) @ResponseBody public boolean getTest(@RequestBody Map<String, String> json) { //json.get("str1") == "test one" }
このメソッドは、リクエスト本文で渡される複数の変数を処理する柔軟な方法を提供し、マップ キーを介して変数にアクセスできるようにします。
追加完全な JSON ツリーを操作するために Jackson の ObjectNode にバインドしたい場合は、以下を利用できます:
public boolean getTest(@RequestBody ObjectNode json) { //json.get("str1").asText() == "test one" }
これらの代替手段により、リクエスト本文内の複数の変数を処理するための複数のオプションが提供されます。特定のニーズに最適なアプローチを選択できる柔軟性。
以上がAjax を使用してリクエスト本文内の複数の変数を Spring MVC コントローラーに渡すことはできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。