1.4 gin控制器配置

  • 数据解析绑定

模型绑定可以将请求体绑定给一个类型,目前支持绑定的类型有 JSON, XML 和标准表单数据 (foo=bar&boo=baz)。
要注意的是绑定时需要给字段设置绑定类型的标签。比如绑定 JSON 数据时,设置 json:"fieldname"
使用绑定方法时,Gin 会根据请求头中 Content-Type 来自动判断需要解析的类型。如果你明确绑定的类型,你可以不用自动推断,而用 BindWith 方法。
你也可以指定某字段是必需的。如果一个字段被 binding:"required" 修饰而值却是空的,请求会失败并返回错误。

// Binding from JSONtype Login struct {    User     string `form:"user" json:"user" binding:"required"`    Password string `form:"password" json:"password" binding:"required"`}func main() {    router := gin.Default()    // 绑定JSON的例子 ({"user": "manu", "password": "123"})    router.POST("/loginJSON", func(c *gin.Context) {        var json Login        if c.BindJSON(&json) == nil {            if json.User == "manu" && json.Password == "123" {                c.JSON(http.StatusOK, gin.H{"status": "you are logged in"})            } else {                c.JSON(http.StatusUnauthorized, gin.H{"status": "unauthorized"})            }        }    })    // 绑定普通表单的例子 (user=manu&password=123)    router.POST("/loginForm", func(c *gin.Context) {        var form Login        // 根据请求头中 content-type 自动推断.        if c.Bind(&form) == nil {            if form.User == "manu" && form.Password == "123" {                c.JSON(http.StatusOK, gin.H{"status": "you are logged in"})            } else {                c.JSON(http.StatusUnauthorized, gin.H{"status": "unauthorized"})            }        }    })    // 绑定多媒体表单的例子 (user=manu&password=123)    router.POST("/login", func(c *gin.Context) {        var form LoginForm        // 你可以显式声明来绑定多媒体表单:        // c.BindWith(&form, binding.Form)        // 或者使用自动推断:        if c.Bind(&form) == nil {            if form.User == "user" && form.Password == "password" {                c.JSON(200, gin.H{"status": "you are logged in"})            } else {                c.JSON(401, gin.H{"status": "unauthorized"})            }        }    })    // Listen and serve on 0.0.0.0:8080    router.Run(":8080")}

Leave a Reply

Your email address will not be published. Required fields are marked *