gin資料解析和解綁
阿新 • • 發佈:2021-06-28
★Json資料解析和繫結
客戶端傳參,後端接收並解析到結構體
package main import ( "net/http" "github.com/gin-gonic/gin" ) // 定義接收資料的結構體 type Login struct { // binding:"required"修飾的欄位,若接收為空值,則報錯,是必須欄位 User string `form:"username" json:"user" uri:"user" xml:"user" binding:"required"` Pssword string `form:"password" json:"password" uri:"password" xml:"password" binding:"required"` } func main() { // 1.建立路由 // 預設使用了2箇中間件Logger(), Recovery() r := gin.Default() // JSON繫結 r.POST("loginJSON", func(c *gin.Context) { // 宣告接收的變數 var json Login // 將request的body中的資料,自動按照json格式解析到結構體 iferr := c.ShouldBindJSON(&json); err != nil { // 返回錯誤資訊 // gin.H封裝了生成json資料的工具 c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } // 判斷使用者名稱密碼是否正確 if json.User != "root" || json.Pssword != "admin" { c.JSON(http.StatusBadRequest, gin.H{"status": "304"}) return } c.JSON(http.StatusOK, gin.H{"status": "200"}) }) r.Run(":8000") }
★表單資料解析和繫結
html前端程式碼:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <form action="http://localhost:8000/loginForm" method="post" enctype="application/x-www-form-urlencoded"> 使用者名稱<input type="text" name="username"><br> 密碼<input type="password" name="password"> <input type="submit" value="提交"> </form> </body> </html>
go後端程式碼:
package main import ( "net/http" "github.com/gin-gonic/gin" ) // 定義接收資料的結構體 type Login struct { // binding:"required"修飾的欄位,若接收為空值,則報錯,是必須欄位 User string `form:"username" json:"user" uri:"user" xml:"user" binding:"required"` Pssword string `form:"password" json:"password" uri:"password" xml:"password" binding:"required"` } func main() { // 1.建立路由 // 預設使用了2箇中間件Logger(), Recovery() r := gin.Default() // JSON繫結 r.POST("/loginForm", func(c *gin.Context) { // 宣告接收的變數 var form Login // Bind()預設解析並繫結form格式 // 根據請求頭中content-type自動推斷 if err := c.Bind(&form); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } // 判斷使用者名稱密碼是否正確 if form.User != "root" || form.Pssword != "admin" { c.JSON(http.StatusBadRequest, gin.H{"status": "304"}) return } c.JSON(http.StatusOK, gin.H{"status": "200"}) }) r.Run(":8000") }
★URI資料解析和繫結
package main import ( "net/http" "github.com/gin-gonic/gin" ) // 定義接收資料的結構體 type Login struct { // binding:"required"修飾的欄位,若接收為空值,則報錯,是必須欄位 User string `form:"username" json:"user" uri:"user" xml:"user" binding:"required"` Pssword string `form:"password" json:"password" uri:"password" xml:"password" binding:"required"` } func main() { // 1.建立路由 // 預設使用了2箇中間件Logger(), Recovery() r := gin.Default() // JSON繫結 r.GET("/:user/:password", func(c *gin.Context) { // 宣告接收的變數 var login Login // Bind()預設解析並繫結form格式 // 根據請求頭中content-type自動推斷 if err := c.ShouldBindUri(&login); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } // 判斷使用者名稱密碼是否正確 if login.User != "root" || login.Pssword != "admin" { c.JSON(http.StatusBadRequest, gin.H{"status": "304"}) return } c.JSON(http.StatusOK, gin.H{"status": "200"}) }) r.Run(":8000") }