Gin/Golang の空のリクエスト本文
Gin で POST リクエストを処理する場合、リクエスト本文が次のように見えるという問題が発生することがあります。空っぽになってください。これは、特にクライアントからデータを受信することを期待している場合にイライラする可能性があります。この問題の一般的な理由の 1 つは、本文を直接出力しようとすることです。
Gin は、リクエスト本文をインターフェイス タイプ ReadCloser として表します。ただし、このインターフェイスの文字列値を出力しても、実際の本文の内容は表示されません。
解決策 1: 文字列の読み取りと出力
デモンストレーションのみを目的として、手動で本文を文字列に読み込んで出力します:
<code class="go">func events(c *gin.Context) { x, _ := ioutil.ReadAll(c.Request.Body) fmt.Printf("%s", string(x)) c.JSON(http.StatusOK, c) }</code>
ただし、これは本文のコンテンツを消費するため、推奨されるアプローチではありません。
解決策 2: バインディングを使用する
Gin のリクエスト本文にアクセスするための推奨される方法は、バインディングを使用することです。 Gin は、JSON などの一般的なデータ形式用の組み込みバインディングを提供します。予期されるデータを表す構造体を定義し、c.Bind を使用すると、本体を自動的に解析して構造体にバインドできます。
<code class="go">type E struct { Events string } func events(c *gin.Context) { data := &E{} c.Bind(data) fmt.Println(data) c.JSON(http.StatusOK, c) }</code>
このアプローチにより、リクエストの本体が正しく解析され、次の方法でアクセスされることが保証されます。定義された構造体。
補足
構造体にバインドする前にリクエスト本文を手動で読み取ると、本文のコンテンツが消費されます。これは、その後の c.Bind の呼び出しが失敗することを意味します。したがって、文字列読み取り手法をデバッグ目的のみに使用するか (推奨されません)、バインディングを使用して一貫した方法で本体にアクセスすることが重要です。
以上がGin/Golang 使用時に空のリクエストボディを処理する方法: バインディングとデバッグテクニックのガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。