gin框架的binding數據 數據綁定


gin內置了幾種數據的綁定例如JSON, XML等. 簡單來說, 即根據Body數據類型, 將數據賦值到指定的結構體變量中. (類似於序列化和反序列化) 
看服務端代碼:

 


// Binding數據
// 注意:后面的form:user表示在form中這個字段是user,不是User, 同樣json:user也是
// 注意:binding:"required"要求這個字段在client端發送的時候必須存在,否則報錯!
type Login struct {
    User     string `form:"user" json:"user" binding:"required"`
    Password string `form:"password" json:"password" binding:"required"`
}
// bind JSON數據
func funcBindJSON(c *gin.Context) {
    var json Login
    // binding JSON,本質是將request中的Body中的數據按照JSON格式解析到json變量中
    if c.BindJSON(&json) == nil { if json.User == "TAO" && json.Password == "123" {
            c.JSON(http.StatusOK, gin.H{"JSON=== status": "you are logged in"})
        } else {
            c.JSON(http.StatusUnauthorized, gin.H{"JSON=== status": "unauthorized"})
        }
    } else {
        c.JSON(404, gin.H{"JSON=== status": "binding JSON error!"})
    }
}

// 下面測試bind FORM數據
func funcBindForm(c *gin.Context) {
    var form Login
    // 本質是將c中的request中的BODY數據解析到form中

    // 方法一: 對於FORM數據直接使用Bind函數, 默認使用使用form格式解析,if c.Bind(&form) == nil // 方法二: 使用BindWith函數,如果你明確知道數據的類型 if c.BindWith(&form, binding.Form) == nil{
        if form.User == "TAO" && form.Password == "123" {
            c.JSON(http.StatusOK, gin.H{"FORM=== status": "you are logged in"})
        } else {
            c.JSON(http.StatusUnauthorized, gin.H{"FORM=== status": "unauthorized"})
        }
    } else {
        c.JSON(404, gin.H{"FORM=== status": "binding FORM error!"})
    }
}

func main(){
    router := gin.Default()
    // 下面測試bind JSON數據
    router.POST("/bindJSON", funcBindJSON)

    // 下面測試bind FORM數據
    router.POST("/bindForm", funcBindForm)

    // 下面測試JSON,XML等格式的rendering
    router.GET("/someJSON", func(c *gin.Context) {
        c.JSON(http.StatusOK, gin.H{"message": "hey, budy", "status": http.StatusOK})
    })

    router.GET("/moreJSON", func(c *gin.Context) {
        // 注意:這里定義了tag指示在json中顯示的是user不是User
        var msg struct {
            Name    string `json:"user"`
            Message string
            Number  int
        }
        msg.Name = "TAO"
        msg.Message = "hey, budy"
        msg.Number = 123
        // 下面的在client的顯示是"user": "TAO",不是"User": "TAO"
        // 所以總體的顯示是:{"user": "TAO", "Message": "hey, budy", "Number": 123
        c.JSON(http.StatusOK, msg)
    })

    //  測試發送XML數據
    router.GET("/someXML", func(c *gin.Context) {
        c.XML(http.StatusOK, gin.H{"name":"TAO", "message": "hey, budy", "status": http.StatusOK})
    })

    router.Run(":8888")
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM