Validation 结合GO-GONIC GORM和VALIDATOR.V2
我是新手,我想通过设置一个GIN-gonicapi来启动。我发现了这个,我对这个骨架很满意。但现在我被验证过程卡住了,我添加了:“gopkg.in/validator.v2”和 变成Validation 结合GO-GONIC GORM和VALIDATOR.V2,validation,go,go-gorm,go-gin,Validation,Go,Go Gorm,Go Gin,我是新手,我想通过设置一个GIN-gonicapi来启动。我发现了这个,我对这个骨架很满意。但现在我被验证过程卡住了,我添加了:“gopkg.in/validator.v2”和 变成 type Todo struct { gorm.Model Title string `json:"title" **validate:"size:2"**` Completed int `json:"completed"` } 然后在我添加的CreateTodo函数中: if e
type Todo struct {
gorm.Model
Title string `json:"title" **validate:"size:2"**`
Completed int `json:"completed"`
}
然后在我添加的CreateTodo
函数中:
if errs := validator.Validate(todo); errs!=nil {
c.JSON(500, gin.H{"Error": errs.Error()})
}
但随后,一个POST call发送:
“错误”:“类型:未知标记”
经过一些研究,我发现:
在字段标记中使用不存在的验证func将始终返回false,并出现错误validate.ErrUnknownTag
因此,**验证:“大小:2”**
一定是错误的
我不知道如何设置验证以及如何在“catch”中显示正确的错误:
看起来您尚未定义验证函数。你也能做到 :
谢谢l159,我读了两遍。。。但这并不容易;)谢谢,我读错了,认为size是一个内置函数,我可能和gorm文档混在一起了……我找不到validate.SetValidationFunc(“size”,size)放在哪里在size函数之后,我得到了:语法错误:函数体之外的非声明语句,但如果我把它放在main中,我得到了未定义的:validate in validate.SetValidationFunc将它放在
validator.validate(todo)
之前,但没有工作:validate.SetValidationFunc(“checkURL”,checkURL)if errs:=validator.validate(todo);错=nil{我一直得到:undefined:validate in validate.SetValidationFunc,我确实为“gopkg.in/validator.v2”和“reflect”添加了导入功能……是的,我可能误解了其他内容,你是对的,我将回到我的书中,无论如何谢谢!
if errs := validator.Validate(todo); errs!=nil {
c.JSON(500, gin.H{"Error": errs.Error()})
}
c.JSON(500, gin.H{"Error": errs.Error()})
func size(v interface{}, param int) error {
st := reflect.ValueOf(v)
if st.Kind() != reflect.String {
return validate.ErrUnsupported
}
if utf8.RuneCountInString(st.String()) != param {
return errors.New("Wrong size")
}
return nil
}
validate.SetValidationFunc("size", size)