在進行Web開發時,處理HTTP請求是非常常見的任務。對於Go語言開發者來說,Gin框架是一個非常受歡迎的選擇。然而,有時候我們需要多次讀取請求正文,以進行一些特定的處理。那麼,在Go-Gin中如何實現多次讀取請求正文呢?在本文中,php小編小新將為大家詳細介紹這個問題的解決方案,幫助開發者更好地應對這項需求。
我正在嘗試在對其資料執行驗證後恢復其資料的上下文。我需要數據在下一個函數中根據需要繼續移動。
我是 golang 新手,下面的程式碼是我所能做到的。非常感謝任何幫助和更好的方法。
提前致謝。
驗證中間件
func SignupValidator(c *gin.Context) { // Read the Body content // var bodyBytes []byte // if c.Request.Body != nil { // bodyBytes, _ = ioutil.ReadAll(c.Request.Body) // } var user entity.User if err := c.ShouldBindJSON(&user); err != nil { validate := validator.New() if err := validate.Struct(&user); err != nil { c.JSON(http.StatusBadRequest, gin.H{ "error": err.Error(), }) c.Abort() return } // c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytes)) } // Read the Body content var bodyBytes []byte if c.Request.Body != nil { bodyBytes, _ = ioutil.ReadAll(c.Request.Body) } fmt.Println(string(bodyBytes)) // this empty c.Next() }
路線
auth.POST("login", gin.Logger(), validations.SignupValidator, func(ctx *gin.Context) { ctx.JSON(200, videoController.Save(ctx)) })
這是一個使用 ShouldBindBodyWith
讀取正文兩次的範例,檢查一下:
package main import ( "log" "net/http" "github.com/gin-gonic/gin" "github.com/gin-gonic/gin/binding" ) type ParamsOne struct { Username string `json:"username"` } type ParamsTwo struct { Username string `json:"username"` } func main() { r := gin.New() r.POST("/", func(c *gin.Context) { var f ParamsOne // Read ones if err := c.ShouldBindBodyWith(&f, binding.JSON); err != nil { log.Printf("%+v", err) } log.Printf("%+v", f) var ff ParamsTwo if err := c.ShouldBindBodyWith(&ff, binding.JSON); err != nil { log.Printf("%+v", err) } log.Printf("%+v", ff) c.IndentedJSON(http.StatusOK, f) }) r.Run(":4000") }
輸出:
$example: ./example [GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production. - using env: export GIN_MODE=release - using code: gin.SetMode(gin.ReleaseMode) [GIN-debug] POST / --> main.main.func1 (1 handlers) [GIN-debug] Listening and serving HTTP on :4000 2020/07/05 10:47:03 {Username:somename} 2020/07/05 10:47:03 {Username:somename}
以上是Go-Gin 多次讀取請求正文的詳細內容。更多資訊請關注PHP中文網其他相關文章!