为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
凤凰求蛊 2022-06-13 15:16:33
我正在尝试使用 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}
查看完整描述

3 回答

?
当年话下

TA贡献1890条经验 获得超9个赞

从这里的示例中,您可以执行以下操作:


type Rule struct {

    ...

}

type Item struct {

    ...

    Rules []Rule `json:"rules" db:"rules" validate:"required"`

    ...

}


查看完整回答
反对 回复 2022-06-13
?
临摹微笑

TA贡献1982条经验 获得超2个赞

您可以使用dive告诉验证器深入到一个切片中:

Rules       []Rule    `json:"rules" db:"rules" validate:"dive"`


查看完整回答
反对 回复 2022-06-13
?
慕仙森

TA贡献1827条经验 获得超8个赞

有两种方法可以做到

  1. 大于:对于数字,这将确保该值大于给定的参数。对于字符串,它检查字符串长度是否大于该字符数。对于切片、数组和映射,它会验证项目的数量。

例子:

Rules       []Rule    `json:"rules" db:"rules" validate:"gt=2"`
  1. 最小值:对于数字,min 将确保该值大于或等于给定的参数。对于字符串,它会检查字符串长度是否至少为该字符数。对于切片、数组和映射,验证项目数。

例子:

Rules       []Rule    `json:"rules" db:"rules" validate:"min=3"`


查看完整回答
反对 回复 2022-06-13
  • 3 回答
  • 0 关注
  • 145 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信