源码
github.com/zsl10/gin-e…
数据绑定
- Gin 提供了非常方便的数据绑定功能,可以将用户传来的参数自动跟我们定义的结构体绑定在一起。
- 模型绑定可以将请求体绑定给一个类型,目前支持绑定的类型有 JSON, XML 和标准表单数据 (foo=bar&boo=baz)。
- 绑定时需要给字段设置绑定类型的标签。比如绑定 JSON 数据时,设置 json:"fieldname"。 使用绑定方法时,Gin 会根据请求头中 Content-Type 来自动判断需要解析的类型。如果你明确绑定的类型,你可以不用自动推断,而用 BindWith 方法。
- 可以指定某字段是必需的。如果一个字段被 binding:"required" 修饰而值却是空的,请求会失败并返回错误。
代码实例
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
// 定义接收数据的结构体
// binding:"required":校验规则,不能为空
type Login struct {
User string `form:"user" json:"user" binding:"required"`
Password string `form:"password" json:"password" binding:"required"`
}
func main() {
router := gin.Default()
// 1) 绑定 url query
router.GET("/test/url/query", func(c *gin.Context) {
// 声明接收的变量
var urlQuery Login
// 将request的query中的数据,自动解析到结构体
if err := c.ShouldBindQuery(&urlQuery); err != nil {
c.String(http.StatusBadRequest, err.Error())
}
c.String(http.StatusOK, "Success")
})
// 2) 绑定表单参数
router.POST("/form", func(c *gin.Context) {
var form Login
if err := c.Bind(&form); err != nil {
c.String(http.StatusBadRequest, err.Error())
}
c.String(http.StatusOK, "Success")
})
// 3) 绑定json数据
router.POST("/json", func(c *gin.Context) {
var json Login
if err := c.ShouldBindJSON(&json); err != nil {
c.String(http.StatusBadRequest, err.Error())
}
c.String(http.StatusOK, "Success")
})
router.Run(":8080")
}