gin数据绑定
测试工具:postman
BindJSON失败的时候,会在httpHeader里面写入状态码
ShoudBind其实就是调用了ShouldBindWith,没有写状态码
package main
import (
"github.com/gin-gonic/gin"
)
type Person struct {
Name string `json:"name" uri:"name" form:"name" binding:"required"` // 若加入binding:"required"则在raw中必须输入所有字段的信息
Age int `json:"age" uri:"age" form:"age" binding:"required"`
Sex bool `json:"sex" uri:"sex" form:"sex" binding:"required"`
High int `json:"high" uri:"high" form:"high"`
}
func main() {
r := gin.Default()
/*
在postman的body的raw中输入以下内容
{
"name":"jack",
"age":13,
"sex":true
}
*/
r.POST("/", func(c *gin.Context) {
var p Person
// DefaultQuery,可以设置一个默认值,但他的value是string类型,所以需要其他数据类型的需要自己去转换
var pwd = c.DefaultQuery("password", "123456")
i, _ := strconv.Atoi(pwd) // string -> int
fmt.Println("i的类型是:",reflect.TypeOf(i))
err := c.ShouldBindJSON(&p)
if err != nil {
c.JSON(200, gin.H{
"msg": "报错",
})
} else {
c.JSON(200, gin.H{
"msg": "success",
"data": p,
"password": i,
})
}
})
//localhost:8080/test01/tom/22/true
r.POST("/test01/:name/:age/:sex", func(c *gin.Context) {
var p Person
err := c.ShouldBindUri(&p)
if err != nil {
c.JSON(200, gin.H{
"msg": "报错",
})
} else {
c.JSON(200, gin.H{
"msg": "success",
"data": p,
})
}
})
//localhost:8080/test01?name=jj&age=10&sex=true
r.POST("/test01", func(c *gin.Context) {
var p Person
err := c.ShouldBindQuery(&p)
if err != nil {
c.JSON(200, gin.H{
"msg": "报错",
})
} else {
c.JSON(200, gin.H{
"msg": "success",
"data": p,
})
}
})
// 在postman的Params中:KEY为hobby,VALUE为打篮球
r.POST("/get", func(c *gin.Context) {
hobby := c.Query("hobby")
var gender = c.DefaultQuery("gender", "男")
c.JSON(200, gin.H{
"msg": "success",
"data": gin.H{
"hobby": hobby,
"gender": gender,
},
})
})
r.Run()
}
访问:localhost:8080
访问:localhost:8080/test01/tom/22/true
访问:localhost:8080/test01?name=jj&age=10&sex=true