// 使用 ShouldBindJSON 将 JSON 请求体绑定到结构体 if err := c.ShouldBindJSON(&reqBody); err != nil { // 如果解析失败,返回错误响应 c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } // 打印解析后的参数 fmt.Printf("Name: %s\n", reqBody.Name) fmt.Printf("Ema...
Bar string `json:"bar"binding:"required"` } funcsomeHandler(c *gin.Context) { // 一般通过c.request.body绑定数据,但是不能多次调用这个方法 objA := FormA{} objB := FormB{} // c.ShouldBind 使用了 c.Request.Body 不可重用 // 注意:ShouldBind方法,如果是GET请求,前台必须使用form-data传参 ...
一般情况使用 c.ShouldBindJSON c.ShouldBind 第二次读取 request body 的数据就会出现 EOF 的错误,因为 c.Request.Body 不可以重用 gin 1.4 之后官方提供了一个 ShouldBindBodyWith 的方法,可以支持重复绑定,原理就是将 body 的数据缓存了下来,但是二次取数据的时候还是得用 ShouldBindBodyWith 才行,直接用 ShouldB...
Foostring`json:"foo" xml:"foo" binding:"required"` } typeformBstruct{ Barstring`json:"bar" xml:"bar" binding:"required"` } funcSomeHandler(c*gin.Context) { objA:=formA{} objB:=formB{} // c.ShouldBind 使用了 c.Request.Body,不可重用。 iferrA:=c.ShouldBind(&objA);errA==nil{ ...
return fmt.Errorf("invalid request") } return decodeJSON(req.Body, obj) } func (jsonBinding) BindBody(body []byte, obj interface{}) error { return decodeJSON(bytes.NewReader(body), obj) } 发现实现了BindingBody这个接口: // github.com/gin-gonic/gin@v1.6.3/binding/binding.go:36 ...
{//log.Print("handle log")body,_:=ioutil.ReadAll(c.Request.Body)fmt.Println("---body/--- \r\n "+string(body))fmt.Println("---header/--- \r\n")fork,v:=range c.Request.Header{fmt.Println(k,v)}//fmt.Println("header \r\n",c.Request.Header)c.JSON(200,gin.H{"receive":...
//1.binding JSON // Example for binding JSON ({"user": "hanru", "password": "hanru123"}) router.POST("/loginJSON", func(c *gin.Context) { var json Login //其实就是将request中的Body中的数据按照JSON格式解析到json变量中 if err := c.ShouldBindJSON(&json); err != nil { ...
Gin框架默认会读取请求body的内容,并且当使用c.BindJSON或类似方法后,Gin会修改io.ReadCloser的内部状态,使得再次尝试从c.Request.Body中读取内容时会遇到EOF错误。因此,要在使用c.BindJSON之前获取请求body的原始字符串,需要首先读取并保存这个body的内容。
在使用gin框架的时候,发现请求的body数据只允许读取一次,针对这种情况有2种解决办法 第一步:base code: package main import ( "fmt" "gopkg.in/gin-gonic/gin.v1" "net/http" "io/ioutil" "bytes" //"encoding/json" ) type Person struct{ ...
19 c.String(http.StatusNotFound, `the body should be formA`) 20 } 21 22 fmt.Println(t.Name) 23 c.String(http.StatusOK, `success`) 24 } BindJson(json)、Bind(查询参数、formdata) 当我们 用post请求发送application/json 或者 formdata数据的时候,要想绑定到实体对象需要用到gin包的bind方法。