4_gin日拱一足---数据的解析和绑定
数据的解析和绑定
1.json格式的数据的解析和绑定
解析form表单传入的json数据:gin.Context.ShouldBindJSON()
注意由于struct是值类型 函数传入必须的是指针类似
ShouldBindJSON()通过反射的方式获取tag标签,并且将form表单传入的数据赋值给结构体
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
//建立一个结构体,定义一个数据模型
type Loger struct {
//binding:required 指定如果没有此字段,报错
Username string `form:"username" json:"user" uri:"user" xml:"user" binding:"required"`
Password string `form:"password" json:"password" uri:"password" xml:"password" binding:"required"`
}
func main() {
//1.创建引擎
r := gin.Default()
r.POST("/login",func(c *gin.Context){
//声明结构体loger对象
var loger Loger
//把接收的数据存放到结构体中
if err := c.ShouldBindJSON(&loger);err != nil {
c.String(http.StatusBadRequest,err.Error())
return
}
//判断用户名和密码是否正确
if loger.Username == "chenjunde" || loger.Password == "123" {
c.JSON(http.StatusOK,gin.H{"status":200})
}
})
r.Run()
}
2.表单数据的解析和绑定
gin.Context.Bind(): 将client传入的form表单映射到结构体中:
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
//建立一个结构体,定义一个数据模型
type Loger struct {
//binding:required 指定如果没有此字段,报错
Username string `form:"username" json:"user" uri:"user" xml:"user" binding:"required"`
Password string `form:"password" json:"password" uri:"password" xml:"password" binding:"required"`
}
func main() {
//1.创建引擎
r := gin.Default()
r.POST("/login",func(c *gin.Context){
//声明结构体loger对象
var loger Loger
//把接收的数据存放到结构体中
if err := c.Bind(&loger);err != nil {
c.String(http.StatusBadRequest,err.Error())
return
}
//判断用户名和密码是否正确
if loger.Username == "chenjunde" || loger.Password == "123" {
c.JSON(http.StatusOK,gin.H{"status":200})
}else {
c.JSON(http.StatusBadRequest,gin.H{"status":304})
}
})
r.Run()
}
URL的解析和绑定
gin.Context.ShouldBindUri()
以上需要注意的就是struct是值类型 函数传参时要传入指针才能对struct进行修改 否则修改的是其副本。
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
//建立一个结构体,定义一个数据模型
type Loger struct {
//binding:required 指定如果没有此字段,报错
Username string `form:"username" json:"user" uri:"user" xml:"user" binding:"required"`
Password string `form:"password" json:"password" uri:"password" xml:"password" binding:"required"`
}
func main() {
//1.创建引擎
r := gin.Default()
r.POST("/:username/:password",func(c *gin.Context){
//声明结构体loger对象
var loger Loger
//把接收的数据存放到结构体中
if err := c.ShouldBindUri(&loger);err != nil {
c.String(http.StatusBadRequest,err.Error())
return
}
//判断用户名和密码是否正确
if loger.Username == "chenjunde" || loger.Password == "123" {
c.JSON(http.StatusOK,gin.H{"status":200})
}else {
c.JSON(http.StatusBadRequest,gin.H{"status":304})
}
})
r.Run()
}