詳細@RequestBodyと@RequestParam

クライアントの要求メッセージ

導入前に、簡単なHTTPリクエストを初めて目、ここでは、クライアントがサーバ要求メッセージにリクエストを送信している次の形式が含まれています。

ここに画像を挿入説明

主に含むリクエストライン、要求ヘッダー、要求本体 3つの部分を。

  • 要求ライン:方法シンボルで始まり、スペース、URI、および要求に続くプロトコルバージョンによって分離
  • リクエストヘッダ:付加情報サーバーを説明するために使用される、直後にライン部(すなわち、最初の行)を要求
  • リクエストボディ:すなわち、要求データが体を要求し、サーバーに他のデータを追加することができます

@RequestBody

JSON文字列の後端部(要求データ本体)のフロントエンドに送信されるデータ、無GETメソッドのリクエストボディので@RequestBody受信データを使用する場合、フロントエンドは、データがGETメソッド送信するために使用することができない、とを受信することを期待@RequestBodyこれは、POSTメソッドで送信されます。

使用は@RequestBody、以下の文書SpringMVCに記載され、前端から後方にオブジェクトを渡すことができ

ここに画像を挿入説明

明らかに、フロントエンドは@RequestBody JSON形式の文字列使用して通過することができHttpMessageConverter、デシリアライゼーション、オブジェクトの後端を、私たちがしたいことを形に変換します。

バックエンドのパラメータがオブジェクトであり、そのパラメータの前に@RequestBodyその後、フロントエンドパスJSON引数は、次の要件を満たす必要があり、変更された場合:

  1. (リクエストボディを含む)クラス対応するHTTP入力ストリームにおける@RequestBody後アノテーションがターゲットクラスに嵌め込まれ:(クラス後ろ即ち@RequestBody) 対応するエンティティクラス属性JSON文字列のキーに従ってマッチします一致は、一致(またはに変換すること)に対応する一貫したJSONキー値である場合、以下の特定の参照コード・ロジック
  2. 値が「JSON文字列は、」対応するプロパティの後端がString型である場合、次に、それは、受信された「」と、プロパティの種類が後端整数、ダブル、および他のタイプである場合、ヌルを受信します。
  3. 値がnullの場合JSON文字列は、その後、対応する受信の後端がヌルです。
  4. パラメータ値は、バックエンドへの転送JSON文字列の時に、そうではありません、または単にフィールドJSON文字列に書き込まれていない場合は、いずれかの場合に書き込む値は、行います「」値、ヌル、またはを持っている必要があります。図文言に示してはなりません

ここに画像を挿入説明

などのContent-Typeの状況に応じて、春MVCは異なるHttpMessageConverter情報変換の分解能を達成するためにかかります。ここでは最も一般的です:フロントエンドのContent-Typeには、アプリケーション/ JSON、JSON文字列データ転送であり、データモデルを受信する@RequestBody後端。

分析データは、プロセスの概要をJSON:

HTTP-情報配信要求は、最終的にカプセル化されるcom.fasterxml.jackson.core.json.UTF8StreamJsonParserに(ヒント:Spring使用してCharacterEncodingFilterUTF-8としてエンコードされたセットのデフォルト)、その後public class BeanDeserializer extends BeanDeserializerBase implements java.io.Serializableによりpublic Object deserializeFromObject(JsonParser p, DeserializationContext ctxt) throws IOException解析方法。

コアロジック解析例:

遠位通過JSON文字列は、であると仮定する:{"name1":"邓沙利文","age":123,"mot":"我是一只小小小小鸟~"}モデル名と年齢の後端のみ属性、およびセッター/ゲッターメソッドが、対応する;で使用される一般与えるdeserializeFromObject(JsonParser p, DeserializationContext ctxt)方法のコアロジック。

ここに画像を挿入説明

@RequestParam

公式サイトに示されているように、RequestParam @直接パラメータ(httpリクエストパラメータによって提出または運ばパラメータフォームまたはフォーム)で要求を読んで
ここに画像を挿入説明

SpringMVC コードは以下の通りであります:

    @RequestMapping(value = "/list.myTest", method = {RequestMethod.POST, RequestMethod.GET})
    @ResponseBody
    public String edit(@RequestParam int id, String jsonData){
        try{

            ActivityTmpEntity activityTmpEntity = new ActivityTmpEntity();
            activityTmpEntity.setJsonData(jsonData);
            activityTmpEntity.setId((long)id);
            System.out.println(activityTmpEntity);
            activityTmpService.edit(activityTmpEntity);
            return "success";

        } catch (Exception e){
            return "error ";
        }
    }

コードのように、本方法は、編集パラメータを必要idjsonData

1を以下のように、要求は、要求パラメータに付加されます。
Get http://localhost:8080/actTemplate/list.myTest?id=16&jsonData=测试1

ここに画像を挿入説明

成功したリクエスト!

図2に示すように、データ要求ポストの形で形で添加しました
ここに画像を挿入説明

成功したリクエスト!

しかしRquestParamの必要性は2つのことを見て:

  1. @RequestParam(XXX)を書き込むための最初のパラメータがない場合名XXX単語がない場合、フロントエンドは、(関係なく値を持っているかどうか、もちろん、注釈の必要な特性が通過しなければならない設定することにより調整することができる)は、ジョブに対応するxxxの名前を持っている必要がありますその後、要求は間違って行くだろう、400が報告しました。
  2. あなたが引数の前に@RequestParam(XXX)を記述していない場合はジョブXXXの名前に対応していない可能性があった場合は、フロントエンドはもしくは、xxxは、それが自動的に一致することがあり、そうでない場合は、リクエストが正しく送信することができます。

@RequestBodyと@RequestParam()は、@ RequestBodyだけ多くても1つに持つことができ、@RequestParam()はもっと持つことができ、同時に使用することができます。

参考https://blog.csdn.net/justry_deng/article/details/80972817#commentBox

公開された44元の記事 ウォン称賛27 ビュー10000 +

おすすめ

転載: blog.csdn.net/weixin_42784951/article/details/103257468