gin數(shù)據(jù)解析和綁定
json數(shù)據(jù)解析和綁定
客戶(hù)端傳參,后端接收到并解析到結(jié)構(gòu)體
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
// 定義接收數(shù)據(jù)的結(jié)構(gòu)體
type Login struct {
// banding:"required"修飾的字段,若接收為空格,則報(bào)錯(cuò),是必須字段
User string `form:"username" json:"user" uri:"user" xml:"user" banding:"required"`
Password string `form:"password" json:"password" uri:"password" xml:"password" banding:"required"`
}
func main() {
// 1. 創(chuàng)建路由器
r := gin.Default()
// JSON綁定
r.POST("loginJSON",func(c *gin.Context){
// 聲明接收的變量
var json Login
// 將request的body中的數(shù)據(jù),自動(dòng)按照json格式解析到結(jié)構(gòu)體
if err:= c.ShouldBindJSON(&json);err!=nil{
// 返回錯(cuò)誤信息
// gin.H封裝了生成json數(shù)據(jù)的工具
c.JSON(http.StatusBadRequest,gin.H{"error":err.Error()})
return
}
// 判斷用戶(hù)名密碼是否正確
if json.User != "root" || json.Password != "admin"{
c.JSON(http.StatusBadRequest,gin.H{"error":"304"})
return
}
c.JSON(http.StatusOK,gin.H{"status":"200"})
})
// 3.監(jiān)聽(tīng)端口,默認(rèn)8080
r.Run(":8000")
}
cmd測(cè)試
curl http://127.0.0.1:8000/loginJSON -H 'content-type:application/json' -d "{\"user\":\"root\",\"password\":\"admin\"}" -X POST
表單的數(shù)據(jù)解析和綁定
請(qǐng)求頁(yè)面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登錄</title>
</head>
<body>
<form action="http://127.0.0.1:8000/loginForm" method="post" enctype="multipart/form-data">
用戶(hù)名:<input type="text" name="username">
<br>
密  碼:<input type="password" name="password">
<input type="submit" value="登錄">
</form>
</body>
</html>
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
// 定義接收數(shù)據(jù)的結(jié)構(gòu)體
type Login struct {
// banding:"required"修飾的字段,若接收為空格,則報(bào)錯(cuò),是必須字段
User string `form:"username" json:"user" uri:"user" xml:"user" banding:"required"`
Password string `form:"password" json:"password" uri:"password" xml:"password" banding:"required"`
}
func main() {
// 1. 創(chuàng)建路由器
r := gin.Default()
// JSON綁定
r.POST("loginForm",func(c *gin.Context){
// 聲明接收的變量
var form Login
// Bind()默認(rèn)解析丙綁定form格式
// 根據(jù)請(qǐng)求頭中content-type自動(dòng)推斷
if err := c.Bind(&form);err != nil {
c.JSON(http.StatusBadRequest,gin.H{"error":err.Error()})
return
}
// 判斷用戶(hù)名密碼是否正確
if form.User != "root" || form.Password != "admin" {
c.JSON(http.StatusBadRequest,gin.H{"status":"304"})
return
}
c.JSON(http.StatusOK,gin.H{"status":"200"})
})
// 3.監(jiān)聽(tīng)端口,默認(rèn)8080
r.Run(":8000")
}

結(jié)果.png
URI數(shù)據(jù)解析和綁定
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登錄</title>
</head>
<body>
<form action="http://127.0.0.1:8000/loginForm" method="post" enctype="multipart/form-data">
用戶(hù)名:<input type="text" name="username">
<br>
密  碼:<input type="password" name="password">
<input type="submit" value="登錄">
</form>
</body>
</html>
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
// 定義接收數(shù)據(jù)的結(jié)構(gòu)體
type Login struct {
// banding:"required"修飾的字段,若接收為空格,則報(bào)錯(cuò),是必須字段
User string `form:"username" json:"user" uri:"user" xml:"user" banding:"required"`
Password string `form:"password" json:"password" uri:"password" xml:"password" banding:"required"`
}
func main() {
// 1. 創(chuàng)建路由器
r := gin.Default()
// JSON綁定
r.GET("/:user/:password",func(c *gin.Context){
// 聲明接收的變量
var login Login
// Bind()默認(rèn)解析丙綁定form格式
// 根據(jù)請(qǐng)求頭中content-type自動(dòng)推斷
if err := c.ShouldBindUri(&login);err != nil {
c.JSON(http.StatusBadRequest,gin.H{"error":err.Error()})
return
}
// 判斷用戶(hù)名密碼是否正確
if login.User != "root" || login.Password != "admin" {
c.JSON(http.StatusBadRequest,gin.H{"status":"304"})
return
}
c.JSON(http.StatusOK,gin.H{"status":"200"})
})
// 3.監(jiān)聽(tīng)端口,默認(rèn)8080
r.Run(":8000")
}
cmd測(cè)試
curl http://127.0.0.1:8000/root/admin