当我们有一个结构体需要来接收传递过来的参数时,可以使用参数绑定直接获取到字段对应的值
//tag主要是为了Username和Password能和前端传过来的username和password对应上
type UserInfo struct {
Username string `form:"username" json:"user"`
Password string `form:"password" json:"pwd"`
}
比如我们现在需要获取路径中的Username和Password,只需要使用ShouldBind()方法,这个方法会自动寻找字段来进行绑定,针对于不同请求方式有以下几种方法
GET请求
r := gin.Default()
r.GET("/user", func(c *gin.Context) {
var u UserInfo
err := c.ShouldBind(&u)
if err != nil {
c.JSON(http.StatusBadRequest, gin.H {
"error": err.Error(),
})
}else {
fmt.Printf("%#v\n", u)
c.JSON(http.StatusOK, gin.H {
"status" : "ok",
})
}
})
r.Run(":9090")
POST请求(以表单形式提交)
r := gin.Default()
r.POST("/form", func(c *gin.Context) {
var u UserInfo
err := c.ShouldBind(&u)
if err != nil {
c.JSON(http.StatusBadRequest, gin.H {
"error": err.Error(),
})
}else {
fmt.Printf("%#v\n", u)
c.JSON(http.StatusOK, gin.H {
"status" : "ok",
})
}
})
r.Run(":9090")
POST(以json形式提交)![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/29d98903349fd3c4348f78775f3e7efa.png)
r := gin.Default()
r.POST("/json", func(c *gin.Context) {
var u UserInfo
err := c.ShouldBind(&u)
if err != nil {
c.JSON(http.StatusBadRequest, gin.H {
"error": err.Error(),
})
}else {
fmt.Printf("%#v\n", u)
c.JSON(http.StatusOK, gin.H {
"status" : "ok",
})
}
})
r.Run(":9090")