Go でリクエスト本文から JSON をキャプチャする
API を開発する場合、多くの場合、POST リクエストの生の JSON 本文をキャプチャする必要があります。 Node.js では、このタスクは request.payload プロパティを使用することで簡単に行えます。ただし、Go では、このアプローチは最初はあまり明確ではないかもしれません。
課題
JSON 本文は io.ReadCloser 型内に格納されており、これは許可しません。複数の読み取り。 json.NewDecoder または context.Bind を使用して直接デコードしようとすると、通常、ボディのバッファーの性質により、空のメッセージまたはエラー メッセージが表示されます。
回避策: ボディを復元する
幸いなことに、本体の内容をキャプチャし、元の状態に復元して、デコード プロセスを実行するという回避策があります。これは、次の手順を使用して実現します。
コードのデモ
実装例は次のとおりです。 :
<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 本文をキャプチャしてデコードできます。
以上がGoでJSONリクエストボディをキャプチャしてデコードする方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。