ホームページ > バックエンド開発 > Golang > Gin/Golang で空のリクエストボディを処理する方法?

Gin/Golang で空のリクエストボディを処理する方法?

Barbara Streisand
リリース: 2024-10-29 09:05:02
オリジナル
994 人が閲覧しました

How to Handle Empty Request Bodies in Gin/Golang?

Gin/Golang での空のリクエスト本文の処理

Go と Gin を理解する過程で、リクエスト本文の取得で問題が発生する可能性があります。この記事では、問題を詳しく掘り下げ、特定のコンテキストに基づいた包括的な解決策を提供します。

問題

外部 POST リクエストからリクエスト本文を読み取ろうとしていますが、出力は一貫しています。

解決策

この問題は、インターフェイス タイプ ReadCloser である c.Request.Body の文字列値を出力しようとすることで発生します。本文に予期したデータが含まれていることを確認するには、その値を文字列に抽出し、それを出力して理解できます。

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

有益ではありますが、このメソッドはリクエスト本文へのアクセスには推奨されません。代わりに、Gin のバインディング機能を利用して、解析プロセスを簡素化します。

<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.Request.Body が枯渇するのを防ぎ、Gin が読み取れるようになります。

注意

ioutil.ReadAll(c.Request.Body) を使用して本文を読み取ると、本文が枯渇し、Gin が読み取れなくなることに注意してください。

<code class="go">func events(c *gin.Context) {
    x, _ := ioutil.ReadAll(c.Request.Body)
    fmt.Printf("%s", string(x))
    data := &E{}
    c.Bind(data) // data remains unchanged since c.Request.Body has been depleted.
    fmt.Println(data)
    c.JSON(http.StatusOK, c)
}</code>
ログイン後にコピー

さらに、このエンドポイントからの JSON 応答には空の Request.Body が表示される場合があります。これは、JSON マーシャリング メソッドが ReadCloser をシリアル化できず、空の表現が生成されるためです。

以上がGin/Golang で空のリクエストボディを処理する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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