【问题标题】:Validator v10 get list of error on single fieldValidator v10 获取单个字段的错误列表
【发布时间】:2022-08-24 15:15:25
【问题描述】:

有没有办法为每个失败的验证获取错误列表? 目前我只是收到一个错误,并且来自第一个失败的验证。

我正在使用 golang 和 Validator v10

type User struct {
    ID          string   `param:\"id\" json:\"id\" validate:\"required\"`
    Name        string   `json:\"name\" validate:\"required,max=100\"`
    Permissions []string `json:\"permissions\" validate:\"permission_list,distinct_list\"`
}

因此,如果字段权限在两者上都失败,我可以得到结果:

{
    \"validationErrors\": {
        \"permissions\": [
            \"permissions must be a list of valid permissions\",
            \"permissions must be uniques\",
        ]
    }
}

    标签: validation go


    【解决方案1】:

    您需要检查返回的错误。

    package main
    
    import (
        "fmt"
        "github.com/go-playground/validator/v10"
    )
    
    type User struct {
        FirstName      string     `validate:"required"`
        LastName       string     `validate:"required"`
    }
    
    func main() {
        testUser := User{}
    
        v := validator.New()
        
        if err := v.Struct(testUser); err != nil {
            validationErrors := err.(validator.ValidationErrors)
            for _, validationError := range validationErrors {
                fmt.Println(validationError.Error())
            }
        }
    }
    

    例子: https://play.golang.com/p/HFdHrPKiYwF

    检查https://github.com/go-playground/validator/blob/master/errors.go 的代码,了解ValidationErrorsFieldError 上可用的方法。

    【讨论】:

      【解决方案2】:

      如果您需要的不仅仅是检查一个验证条件然后返回它,而是需要检查每个失败的验证,那么您需要对包进行一些增强,就像我的情况一样。我需要从第 480 行的 validator.go source 中删除 return 语句

      【讨论】:

        猜你喜欢
        • 2020-12-29
        • 1970-01-01
        • 2018-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-24
        • 2021-03-16
        • 2022-11-22
        相关资源
        最近更新 更多