第七篇:自定义验证器结合正则验证JSON参数
一:引言:上一篇我们使用了验证器,这也是一个非常强大的验证器,今天这篇我们来讲下自定义的验证器,并且结合正则来验证Json的参数,其实我们内置的验证器,也许不符合我们的要求,那么这个时候就需要
加入我们自己的验证规则;
假设请求topic详细时 可以是:
/topics/123(id形式)
也可以是:
/topics/wodetiezi(拼音样式的url,或为了SEO等原因)
因此扩展下:
type Topic struct { TopicID int `json:"id"` TopicTitle string `json:"title" binding:"min=4,max=10"` TopicShortTitle string `json:"stitle" binding:"required,nefield=TopicTitle"` UserIP string `json:"ip" binding:"ipv4"` TopicScore int `json:"score" binding:"omitempty,gt=5"`
TopicUrl string `json:"url" binding:"omitempty,topicurl"` }
我们加了个字段 TopicUrl,新增验证规则:TopicUrl string `json:"url" binding:"omitempty,topicurl"`
其中绑定了两个验证规则:
omitempty:如果传递,为传递的值,如果不传递,则默认为零值
topicurl:自定义的验证规则,自定义的验证规则的这个名字可以随便写,只要你喜欢就可以;
等下我们会写个函数专门对topicurl这个规则做验证处理,接下来我们根据官方文档的方式来创建一个规则;其实在我们的文档里有相关的例子;
首先我们去创建一个函数,这个函数里面有一堆的参数,这里面有些参数我们用不到,先用到一部分,后面遇到再讲解其它的一些用法;
反射值获取原始值的方法 Interface()interface{} 将值以interface{}类型返回,可以通过类型断言转换为指定类型 Int() int64 将值以int类型返回,所有有符号整型均可以此方式返回 Uint() uint64 将值以uint类型返回,所有无符号整型均可以此方式返回 Float() float64 将值以双精度(float64)类型返回,所有f浮点数(float32,float64)均可以此方式返回 Bool() bool 将值以bool类型返回 Bytes()[]bytes 将值以字节数组[]bytes类型返回 String() string 将值以字符串类型返回
1.1:创建自己的验证规则
1.2:main函数中进行调用即可