Web アプリケーションで HTTP リクエストを処理する場合、多くの操作でリクエスト本文をキャプチャすることが不可欠です。 Go では、このタスクを達成するためのいくつかのアプローチがあります。
次のシナリオを考えてみましょう。POST リクエストの生の JSON 本文を取得し、データベースに保存する必要があります。これを行うには、本体の元の状態を保存する必要があります。
問題:
json.NewDecoder を使用して本体を直接デコードしようとしたり、構造体にバインドしようとすると、 http.Request.Body は複数回読み取ることができないバッファとしての性質があるため、空の結果またはエラーが発生します。
解決策:
キャプチャするには元の状態を維持しながらリクエスト本文を読み込むには、段階的な解決策を次に示します:
コード例:
<code class="go">// Read the Body content var bodyBytes []byte if context.Request().Body != nil { bodyBytes, _ = ioutil.ReadAll(context.Request().Body) } // Restore the io.ReadCloser to its original state context.Request().Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytes)) // Continue to use the Body, like Binding it to a struct: order := new(models.GeaOrder) error := context.Bind(order)</code>
出典:
以上がコンテンツを失わずに、Go でリクエスト本文から JSON を読み取る方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。