Gin学习笔记 – Validator
2012 年 9 月 18 日
作者:朋也
日期:2021-02-24
版权声明:自由转载-非商用-非衍生-保持署名( 创意共享3.0许可证 )
gin里用的验证器是 https://github.com/go-playground/validator
配合着gin里提供的方法,用起来很方便
首先在实体类里定义好要进行什么验证,常用的有
required email url min max lte gte
更多验证规则可以去readme里查看 https://github.com/go-playground/validator/blob/master/README.md
修改前面写的 User 结构
type User struct { Id int `json:"id" gorm:"primaryKey"` Name string `json:"name" binding:"required"` Password string `json:"password" binding:"required,min=6,max=32"` Age int `json:"age" binding:"gte=1,lte=120"` Info UserInfo `json:"info" gorm:"-" binding:"required"` } type UserInfo struct { Bio string Email string `json:"email" binding:"required,email"` }
可以看到,需要验证的字段,要用 binding 修饰,如果有多个验证规则,中间用英文逗号隔开
注意:这种验证只是针对请求参数的验证,不一定非要写在跟数据库映射关系的结构里,完全可以自定义一个 struct 来接收请求的参数然后制定验证规则
我这里是省事,就写到一块了
下面修改一下接收参数的写法,我这里以保存接口为例
func SaveUser(c *gin.Context) { var user model.User // 使用 ShouldBind 方法实现字段与结构绑定且进行规则验证 if err := c.ShouldBind(&user); err == nil { c.JSON(http.StatusOK, service.SaveUser(user.Name, user.Password, user.Age)) } else { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) } }
如果请求类型是 application/json
且参数是一段json字符串,则使用 c.ShouldBindJson()
方法来接收参数
相应的还有如下一些方法来绑定不同类型的请求参数