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

报告相同问题?