结合 GO GIN-GONIC GORM 和 VALIDATOR.V2
combining GO GIN-GONIC GORM and VALIDATOR.V2
我是 Go 的新手,我想通过设置 GIN-GONIC API 来启动。我找到了这个 tutorial,我对那个骨架很满意。但现在我坚持使用我添加的验证过程:"gopkg.in/validator.v2" 和
type Todo struct {
gorm.Model
Title string `json:"title"`
Completed int `json:"completed"`
}
变成了
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 呼叫发送:
"Error": "Type: unknown tag"
经过一番研究,我发现:
Using a non-existing validation func in a field tag will always return false and with error validate.ErrUnknownTag
.
所以**validate:"size:2"**
一定是错的...
我不知道如何设置验证以及如何在 "catch" 中显示正确的错误:
c.JSON(500, gin.H{"Error": errs.Error()})
您似乎还没有定义 size
验证函数。你也可以。
Custom validation functions:
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)
我是 Go 的新手,我想通过设置 GIN-GONIC API 来启动。我找到了这个 tutorial,我对那个骨架很满意。但现在我坚持使用我添加的验证过程:"gopkg.in/validator.v2" 和
type Todo struct {
gorm.Model
Title string `json:"title"`
Completed int `json:"completed"`
}
变成了
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 呼叫发送:
"Error": "Type: unknown tag"
经过一番研究,我发现:
Using a non-existing validation func in a field tag will always return false and with error
validate.ErrUnknownTag
.
所以**validate:"size:2"**
一定是错的...
我不知道如何设置验证以及如何在 "catch" 中显示正确的错误:
c.JSON(500, gin.H{"Error": errs.Error()})
您似乎还没有定义 size
验证函数。你也可以。
Custom validation functions:
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)