Gin/Golang の空のリクエスト本文
Gin で POST リクエストを処理する場合、リクエスト本文が次のように見えるという問題が発生することがあります。空っぽになってください。これは、特にクライアントからデータを受信することを期待している場合にイライラする可能性があります。この問題の一般的な理由の 1 つは、本文を直接出力しようとすることです。
Gin は、要求本文をインターフェイス タイプ ReadCloser として表します。ただし、このインターフェイスの文字列値を出力しても、実際の本文の内容は表示されません。
解決策 1: 文字列の読み取りと出力
デモンストレーションのみを目的として、手動で本文を文字列に読み込んで出力します:
func events(c *gin.Context) {
x, _ := ioutil.ReadAll(c.Request.Body)
fmt.Printf("%s", string(x))
c.JSON(http.StatusOK, c)
}
ただし、これは本文のコンテンツを消費するため、推奨されるアプローチではありません。
解決策 2: バインディングを使用する
アクセスするための推奨方法Gin のリクエスト本文はバインディングを使用します。 Gin は、JSON などの一般的なデータ形式用の組み込みバインディングを提供します。予期されるデータを表す構造体を定義し、c.Bind を使用すると、本体を自動的に解析して struct:
type E struct {
Events string
}
func events(c *gin.Context) {
data := &E{}
c.Bind(data)
fmt.Println(data)
c.JSON(http.StatusOK, c)
}
このアプローチにより、リクエスト本文が正しく解析され、定義された構造体経由でアクセスされることが保証されます。
追加メモ
リクエスト本文を手動で読み取る前にそれを構造体にバインドすると、本体のコンテンツが消費されます。これは、その後の c.Bind の呼び出しが失敗することを意味します。したがって、文字列読み取り手法をデバッグ目的のみに使用するか (推奨されません)、バインディングを使用して一貫した方法で本文にアクセスすることが重要です。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3