普拉多VX

人生一路,不问来时,不知归期

0%

Gin web开发系列(五)

URL路径参数

在web开发中经常见如下列表,那在gin中可以对这些path参数进行识别
/video/223232/02
/blog/2020/02/02

使用方法在path上什么/blog/:xxx/:xxx,注意千万不要直接写成/:xxx/:xxx。这样其它请求会匹配到。然后什么Param()方法获取值.

参考样例:

1
2
3
4
5
6
7
8
9
r.GET("/blog/:year/:month", func(c *gin.Context) {
year := c.Param("year")
month := c.Param("month")

c.JSON(http.StatusOK,gin.H{
"year":year,
"month":month,
})
})

访问

ShouldBind数据绑定

获取参数的方式还有一种,就是将参数绑定到结构上,使用ShouldBind,还有一个ShouldBindQuery方法,该方法只绑定参数,不返回参数的数据。也就是说只输出key。

解析前端通过json传递过来的数据参数,绑定到结构体然后去访问,如果没有传递数值默认为空。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
type UserInfo struct {
Username string `json:"username"`
Password string `json:"password"`
}

// shouldbind数据绑定
r.POST("/json2",func(c *gin.Context){
var u UserInfo

err :=c.ShouldBind(&u)
if err != nil {
c.JSON(http.StatusBadRequest,gin.H{
"error":err.Error(),
})
}else{
c.JSON(http.StatusOK,gin.H{
"status":"ok",
"username":u.Username,
"password":u.Password,
})

}

})

此外可以使用框架自带的验证方法,使username and password为必填

1
2
3
4
type UserInfo struct {
Username string `json:"username" binding:"required"`
Password string `json:"password" binding:"required"`
}

如果前端不填写数据则会提示如下错误

1
2
3
{
"error": "Key: 'UserInfo.Username' Error:Field validation for 'Username' failed on the 'required' tag"
}