英文:
combining GO GIN-GONIC GORM and VALIDATOR.V2
问题
我对Go还不太熟悉,但我可以帮你翻译你提供的内容。以下是翻译的结果:
我对Go还不太熟悉,我想通过设置一个GIN-GONIC API来开始。我找到了这个教程,我对那个框架非常满意。但是现在我在验证过程中遇到了问题,我添加了"gopkg.in/validator.v2"和
type Todo struct {
gorm.Model
Title string `json:"title" **validate:"size:2"**`
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"
经过一些研究,我发现:
> 在字段标签中使用一个不存在的验证函数将始终返回false,并带有错误validate.ErrUnknownTag
。
所以**validate:"size:2"**
可能是错误的...
我不明白如何设置验证,也不知道如何在"catch"中显示正确的错误信息:
c.JSON(500, gin.H{"Error": errs.Error()})
英文:
I am quite new to Go and I would like to startup by setting a GIN-GONIC API. I found this tutorial and I am very happy with that skeleton. But now I am stuck with the validating process which I added: "gopkg.in/validator.v2" and
type Todo struct {
gorm.Model
Title string `json:"title"`
Completed int `json:"completed"`
}
became
type Todo struct {
gorm.Model
Title string `json:"title" **validate:"size:2"**`
Completed int `json:"completed"`
}
and then in the CreateTodo
function which I added :
if errs := validator.Validate(todo); errs!=nil {
c.JSON(500, gin.H{"Error": errs.Error()})
}
but then a POST call send :
> "Error": "Type: unknown tag"
after some research I found that :
> Using a non-existing validation func in a field tag will always return false and with error validate.ErrUnknownTag
.
so the **validate:"size:2"**
must be wrong ...
I don't get how to set the validation and also how to display the correct error within the "catch":
c.JSON(500, gin.H{"Error": errs.Error()})
答案1
得分: 0
看起来你还没有定义size
验证函数。你可以这样做。
自定义验证函数:
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)
英文:
Looks like you haven't defined size
validation function. Also you can do it.
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)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论