在java web开发中我们经常会涉及到对请求的参数进行验证,比如验证email,验证password,验证username的长度等等。本文我们来演示一下自定义字段验证器。
举个例子,比如我们要验证登录的用户名,他的字符串长度必须大于5,那么在go web开发中我们总体的做法如下:
1、编写自定义字段验证器 2、注册自定义字段验证器 3、添加字段验证器到想要验证的参数字段上
下面我们按照上面的流程挨个来演示一下。
1、自定义验证器
我们在config包下创建一个validatorconfig.go文件
然后再validatorconfig.go文件中编写对应的验证器代码。首先编写核心代码:
var userNameValidator validator.Func = func(fl validator.FieldLevel) bool { val, ok := fl.Field().Interface().(string) if !ok { return false } log.Println("获取到的字段值是", val) //用户名长度必须大于5 if len(val) < 5 { return false } return true }
这里我们使用的是 https://github.com/go-playground/validator/v10 验证框架,上诉的代码总体代表的是从对应的字段取出值,然后进行判断,如果符合规则返回true,不符合规则返回false。
然后把自定义的字段验证器进行绑定且定义一个名称,代码如下:
func registerUserName() { if v, ok := (binding.Validator.Engine()).(*validator.Validate); ok { err := v.RegisterValidation("usernameValidator", userNameValidator) if err != nil { return } } }
在实际开发中,我们会涉及到非常多的自定义字段验证器,为了方便统一初始化管理,我们继续编写一个Init的方法
func InitValidate() { registerUserName() }
二、注册自定义验证器
上面我们使用InitValidate方法统一绑定多个自定义字段验证器,所以在项目启动的时候初始化就非常简单,只需要执行InitValidate方法即可,例如:
三、使用自定义字段验证器
接下来我们就涉及到使用了上面定义的字段验证器了,还记得我们给每一个自定义字段验证器绑定了一个名字:
比如我们想要在login接口的username字段上使用这个验证器,那么我们修改request包下的loginRequest.go文件,给username字段添加上binding即可,示例如下:
type LoginReuqest struct { Username string `json:"username" binding:"required,usernameValidator"` password string `json:"password"` }
这样子直接就生效了。
四、验证
接下来我们验证下这里的效果,请求的时候我们把username字段的字符长度设置为小于5,效果如下:
接下来我们如果不传usernam字段试试:
最后我们把username字段的字符长度设置为大于5,效果如下:
以上可看到我们的自定义字段验证器生效了,非常棒。最后按照惯例,附上本案例的源码,登陆后即可下载。
还没有评论,来说两句吧...