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 サイトの他の関連記事を参照してください。