golang 解决Gin框架,body参数只能读取一次问题
在使用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", }) }