在使用gin框架的時候,發現請求的body數據只允許讀取一次。
讀取第二次BindJSON這一步報錯:EOF。
利用golang官方庫,推薦這種方法解決這個問題
package main import ( "fmt" "gopkg.in/gin-gonic/gin.v1" "net/http" "io/ioutil" "bytes" "encoding/json" ) type Person struct{ Name string `json:"name"` Phone int64 `json:"phone"` Data string `json:"data"` } func main(){ router := gin.Default() router.POST("/",HelloMiddleware(),Hello) router.Run(":8000") } func HelloMiddleware() gin.HandlerFunc { return func(ctx *gin.Context) { data,err := ctx.GetRawData() if err != nil{ fmt.Println(err.Error()) } fmt.Printf("data: %v\n",string(data)) ctx.Request.Body = ioutil.NopCloser(bytes.NewBuffer(data)) // 關鍵點 ctx.Next() } } func Hello(ctx *gin.Context){ var info Person err := ctx.BindJSON(&info) if err != nil{ fmt.Println(err.Error()) } fmt.Printf("info: %#v\n",info) ctx.JSON(http.StatusOK, gin.H{ "code":200, "msg":"success", }) }