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", }) }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
2021-01-21 Opencv 基础用法