ホームページ > バックエンド開発 > Golang > コンテンツを失わずに、Go でリクエスト本文から JSON を読み取る方法は?

コンテンツを失わずに、Go でリクエスト本文から JSON を読み取る方法は?

Linda Hamilton
リリース: 2024-11-02 08:43:02
オリジナル
219 人が閲覧しました

How to Read JSON from the Request Body in Go Without Losing its Content?

Go でリクエスト本文から JSON を読み取る

Web アプリケーションで HTTP リクエストを処理する場合、多くの操作でリクエスト本文をキャプチャすることが不可欠です。 Go では、このタスクを達成するためのいくつかのアプローチがあります。

次のシナリオを考えてみましょう。POST リクエストの生の JSON 本文を取得し、データベースに保存する必要があります。これを行うには、本体の元の状態を保存する必要があります。

問題:

json.NewDecoder を使用して本体を直接デコードしようとしたり、構造体にバインドしようとすると、 http.Request.Body は複数の読み取りができないバッファとしての性質があるため、空の結果またはエラーが発生します。

解決策:

元の状態を維持しながらリクエスト本文をキャプチャするには、段階的な解決策を次に示します:

  1. 本文の内容を読み取る: ioutil.ReadAll を使用して本文の内容をバイトに読み取ります。 array.
  2. ボディを復元します: バイト配列の周囲に新しい ioutil.NopCloser を作成し、それを context.Request().Body.
  3. に割り当て直します。処理を続行します: これで、リクエスト本文を構造体にバインドしたり、他の処理を実行したりして、引き続き使用できるようになります。操作。

例コード:

<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>
ログイン後にコピー

出典:

  • http://grokbase.com/t/gg/golang-nuts/12adq8a2ys/go -nuts-re-reading-http-response-body -or-any-reader
  • https://medium.com/@xoen/golang-read-from-an-io-readwriter-without-loosing-its-content-2c6911805361

以上がコンテンツを失わずに、Go でリクエスト本文から JSON を読み取る方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート