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

结合了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()})
  • 写回答

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)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同