Spring | @RequestBody & @ResponseBody


Overview

@RequestBodyhttp bodyをドメインオブジェクトに転送またはマッピングし、javaオブジェクトのインバウンドHttpRequest本文の自動逆シーケンス化を可能にする.@ResponseBody返されたオブジェクトは自動的にjsonにシリアル化され、HttpResponseオブジェクトに再送される.

@RequestBody



requestbodyの場合、上記の写真のようにパラメータで使用できます.request body宣言の場合、ターゲットの値はPARAMETER値であるため、パラメータにのみ使用できます.

前述したように,通信によりテストを行った.

IDEでデバッグを行い、データが入っているかどうかを確認します.データのシリアル化が可能です.では、どのような方法に変換しますか?
メッセージConvertを使用して変換されるHttpMessageConvertというインタフェースがあります.
HttpMessageConvertはいつ使用しますか?
  • HTTP APIのようにJsonデータを直接読み込んだり書き込んだりする;
  • @requestBody操作時にHTTP Body内の文字内容をそのまま返し、HttpMessageConvertで操作する.

  • HttpMessageConvertインタフェースにはcanRead、canWrite、getSupportedMediaTypeなどがあります.
  • canRead:可読性方法
  • canwrite:利用可能かどうかの方法
  • getSupported MediaType:MediaTypeを導入する方法
  • read:読み方
  • write:使用方法
  • HTTPリクエストデータを読み込むプロセス
  • コントローラが@Request Bodyを使用している場合
  • canReadでメールの可読性をチェック
  • readメソッドを呼び出す
  • HTTPリクエストデータを書き込むプロセス
  • コントローラが使用して@Request Bodyに戻る場合
  • canwriteで書き込みがサポートされているかチェックした後
  • canWrite条件でwirteメソッドを呼び出してHTTP本体内でデータを生成する.
  • @ResponseBody



    ResponseBodyオペレーションの場合、ターゲットの値はType&Methodであるため、メソッドレベルで使用できます.
    したがって、デフォルトで使用する場合、@Controller+@ResponseBodyでJsonにシリアル化され、HttpResponseオブジェクトに渡されます.

    下図のように、
    curl -i -X POST \
    -d '{"name":"test","content":"test...."}' \
    -H "Content-Type: application/json" \
    http://localhost:28000/api/test

    以上のようにデータを抽出することができます.Json APIは、@Controller+@ResponseBody形式で記述することもできます.ただし、上記の効果は@RestControllerで実現できます.理由は@RestController=@Controller+@ResponseBodyです.そして、ResponseEntityHttpResponseオブジェクトを補助オブジェクトではなくオブジェクトにすることができます.

    整理する

    @RequestBody
  • パラメータでしか宣言できない.
  • HttpBody自動逆シリアル化(内部でHttpMessageConvertを実行します.)
  • @ResponseBody
  • jsonを用いてシリアル化する.
  • HttpResponseオブジェクトにコミットする.
  • リファレンス


    Spring’s RequestBody and ResponseBody Annotations