doujiekeyan0622
2017-02-10 09:26
浏览 144
已采纳

结合了GO GIN-GONIC GORM和VALIDATOR.V2

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()})

图片转代码服务由CSDN问答提供 功能建议

我是Go语言的新手,我想通过设置GIN-GONIC API进行启动。 我发现了这个教程,我对这个框架感到非常满意。 但是现在我停留在添加的验证过程上:“ gopkg.in/validator.v2”和

  type Todo struct {
 gorm.Model 
标题字符串 `json:“ title”`
已完成int`json:“ completed”`
} 
   
 
 

成为

   type Todo struct {
 gorm.Model 
标题字符串`json:“ title” ** validate:“ size:2” **`
 Completed int`json:“ completed”`
} 
    
 
 

,然后在我添加的 CreateTodo 函数中:

 如果出现错误:=  validator.Validate(待办事项);  errs!= nil {
 c.JSON(500,gin.H {“ Error”:errs.Error()})
} 
   
 
 

POST呼叫发送:

“错误”:“ Type:未知标签”

研究发现:

在字段标记中使用不存在的验证函数将始终返回false并出现错误 validate.ErrUnknownTag

,所以 ** validate:“ size:2” ** 必须是错误的... \ n

我不知道如何设置验证以及如何在“捕获”中显示正确的错误:

  c.JSON(500,杜松子酒。  H {“ Error”:errs.Error()})
   
 
  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • douduan5086 2017-02-10 10:22
    已采纳

    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)
    
    已采纳该答案
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题