Gin 如何同时绑定查询字符串和表单数据?
gin.Context
的 ShouldBind()
函数既可以绑定 url 查询参数又可以绑定 post 数据,但是优先绑定 POST 数据。更多的内容可以阅读 Github issue #742.
package main import ( "log" "net/http" "time" "github.com/gin-gonic/gin" ) type Person struct { Name string `form:"name"` Address string `form:"address"` Birthday time.Time `form:"birthday" time_format:"2006-01-02" time_utc:"1"` CreateTime time.Time `form:"createTime" time_format:"unixNano"` UnixTime time.Time `form:"unixTime" time_format:"unix"` } func main() { route := gin.Default() route.GET("/testing", startPage) route.Run(":8085") } func startPage(c *gin.Context) { var person Person // 如果是 `GET` 请求,只使用 `Form` 绑定引擎(`query`)。 // 如果是 `POST` 请求,首先检查 `content-type` 是否为 `JSON` 或 `XML`,然后再使用 `Form`(`form-data`)。 // 查看更多:https://github.com/gin-gonic/gin/blob/master/binding/binding.go#L88 if c.ShouldBind(&person) == nil { log.Println(person.Name) log.Println(person.Address) log.Println(person.Birthday) log.Println(person.CreateTime) log.Println(person.UnixTime) } c.String(http.StatusOK, "Success") }
你可以用下面的 cURL 命令来测试返回值
curl -X GET "localhost:8085/testing?name=appleboy&address=xyz&birthday=1992-03-15&createTime=1562400033000000123&unixTime=1562400033"