ホームページ >バックエンド開発 >Golang >Go-Gin ミドルウェアでリクエスト本文を複数回読み取るにはどうすればよいですか?

Go-Gin ミドルウェアでリクエスト本文を複数回読み取るにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-16 02:20:14164ブラウズ

How Can I Read the Request Body Multiple Times in Go-Gin Middleware?

Go-Gin ミドルウェアでリクエスト本文を複数回取得する

Web フレームワークである Go-Gin では、開発者が次のようなシナリオに遭遇する可能性があります。リクエストの本文を複数回読み取る必要があります。これは、本体データが検証目的で使用され、後で後続の関数に渡される場合に必要になります。

この問題を解決する 1 つのアプローチは、検証を実行する前に本体を変数に読み取り、本体をその変数に復元することです。次の関数に進む前に元の状態に戻ります:

func SignupValidator(c *gin.Context) {
    var bodyBytes []byte
    var bodyBytesCopy []byte
    if c.Request.Body != nil {
        bodyBytes, _ = ioutil.ReadAll(c.Request.Body)
    }
    copy(bodyBytesCopy, bodyBytes) // Save body for later use
    var user entity.User
    if err := c.ShouldBindJSON(&user); err != nil {
        // Validation code
        c.Abort()
        return
    }
    c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytesCopy)) // Restore original body
    c.Next()
}

このアプローチでは、ioutil.ReadAll 関数を使用して元のストリームの本文を読み取り、検証に使用するコピーを作成します。その後、元のボディが復元され、後続の関数がそれにアクセスできるようになります。

以上がGo-Gin ミドルウェアでリクエスト本文を複数回読み取るにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。