猿问

带有自定义结构的 Golang 验证器

我正在尝试使用 Golang 验证器(https://godoc.org/gopkg.in/go-playground/validator.v9)来验证请求正文。我有两个实体,规则和项目。Item 实体依赖于 Rule 实体。


type Rule struct {

    RuleNo      int64     `json:"ruleNo" db:"rule_no"`

    Category    string    `json:"category" db:"category" validate:"alphanum"`

    CreatedAt   time.Time `json:"createdAt" db:"created_at"`

    UpdatedAt   time.Time `json:"updatedAt" db:"updated_at"`

}


type Item struct {

    SeqNo       int64     `json:"-" db:"item_restriction_no"`

    ItemId      string    `json:"itemId" db:"item_id" validate:"alphanum"`

    ItemType    string    `json:"itemType" db:"item_type" validate:"alphanum"`

    Rules       []Rule    `json:"rules" db:"rules"` // how to validate this field?

    CreatedAt   time.Time `json:"createdAt" db:"created_at"`

    UpdatedAt   time.Time `json:"updatedAt" db:"updated_at"`

}

如何验证请求正文是否具有 Item 结构的“规则”字段的规则列表?这是我的验证功能:


func (item *Item) Validate() error {

    v := validator.New()

    if err := v.Struct(item); err != nil {

        return err

    }

    return nil

}


凤凰求蛊
浏览 146回答 3
3回答

当年话下

从这里的示例中,您可以执行以下操作:type Rule struct {    ...}type Item struct {    ...    Rules []Rule `json:"rules" db:"rules" validate:"required"`    ...}

临摹微笑

您可以使用dive告诉验证器深入到一个切片中:Rules       []Rule    `json:"rules" db:"rules" validate:"dive"`

慕仙森

有两种方法可以做到大于:对于数字,这将确保该值大于给定的参数。对于字符串,它检查字符串长度是否大于该字符数。对于切片、数组和映射,它会验证项目的数量。例子:Rules       []Rule    `json:"rules" db:"rules" validate:"gt=2"`最小值:对于数字,min 将确保该值大于或等于给定的参数。对于字符串,它会检查字符串长度是否至少为该字符数。对于切片、数组和映射,验证项目数。例子:Rules       []Rule    `json:"rules" db:"rules" validate:"min=3"`
随时随地看视频慕课网APP

相关分类

Go
我要回答