0

私は Go を初めて使用するので、GIN-GONIC API を設定して起動したいと考えています。このチュートリアルを見つけて、そのスケルトンにとても満足しています。しかし今、私が追加した検証プロセスで立ち往生しています:「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 呼び出しが送信されます:

"エラー": "タイプ: 不明なタグ"

いくつかの調査の後、次のことがわかりました。

フィールド タグで存在しない検証関数を使用すると、常に false とエラーが返されますvalidate.ErrUnknownTag

だから**validate:"size:2"**間違っているに違いない...

検証を設定する方法と、「キャッチ」内に正しいエラーを表示する方法がわかりません。

c.JSON(500, gin.H{"Error": errs.Error()})
4

1 に答える 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)
于 2017-02-10T10:22:08.433 に答える