SpringMVCはMapを使用してリクエストパラメータの分析を受け取ります
最初のケースでは、何も設定されず、パラメータも渡されません。
@Controller @RequestMapping として注釈が付けられます
渡された BindingAwareModelMap 型が SpringMVC であることがわかります。SpringMVC の暗黙的モデルはこの型です。そのスコープはリクエスト フィールドと同等です。Model パラメーターと ModelMap パラメーターを追加するとき、SpringMVC は実際にこの暗黙的モデルを渡します。この暗黙的なモデルでは、返されたページのリクエスト フィールドを通じて値を取得できます。
2 番目のケースでは、パラメータを追加してみてください => .../testmap?test1=2342
結果の型は同じであり、パラメータは渡されません。もちろん、リクエストを使用してパラメータを取り出すこともできます。
3 番目のケースでは、@RequestParam アノテーションを Map パラメータに追加します。
1. リクエストの取得 => http://localhost:8080/ssm/v2/testmap?test1=234234
パラメーターは正常に渡されました。Map タイプは LinkedHashMap であり、暗黙的なモデルではないことに注意してください。
別の Model パラメーターを追加して、暗黙的モデルにまだ値がないかどうかを確認します。
したがって、 @RequestParam アノテーションを追加した後、SpringMVC は Get リクエストを対応するパラメータにカプセル化し、パラメータが Map の場合は、暗黙的なモデルを渡すのではなく、LinkedHashMap としてカプセル化されます。
2. リクエストを投稿し、投稿リクエストをテストします
結果は Get と一致します。パラメーターに @RequestParam アノテーションがない場合、Map は暗黙的なモデルを受け取ります。@RequestParam アノテーションが追加される場合、Map は LinkedHashMap を受け取ります。暗黙的なモデルには値がありません。
4 番目のケースでは、@RequestBody アノテーションを Map パラメーターに追加し、リクエスト メソッドは Post です。
予期せず、これは正常に渡されました。結果は @RequestParam アノテーションと似ており、これも LinkedHashMap です。
複雑な Json データも解析して正常に受信できます。
要約する
SpringMVC がリクエストを処理し、Map 型を使用してパラメータを受け取るときに、パラメータに注釈がない場合は、Model および ModelMap パラメータと同等の BindingAwareModelMap 型が渡されます。
@RequestParam アノテーションがパラメータに追加されると、パラメータはパッケージ化されて LinkedHashMap オブジェクトと呼ばれます。パラメータのキーは Map のキーであり、パラメータの値は Map のキーです。Get をサポートしています。 Post メソッド (Put と Delete をサポートする必要がありますが、テストされていません。この 2 つのメソッドは Post に似ています)。
@RequestBody アノテーションを追加すると、受信した Json 型データも LinkedHashMap オブジェクトにパッケージ化されます。このアノテーションは Get リクエストをサポートしません。Get リクエストはリクエスト本文なしで Json を渡すことはできません。