带有错误重命名字段的Golang验证程序包

laik7k3q  于 2023-06-19  发布在  Go
关注(0)|答案(1)|浏览(138)

我试着用golang验证包
https://pkg.go.dev/github.com/go-playground/validator/v10
是否有方法屏蔽返回错误的字段?下面的例子,让我们假设我有一个像下面这样的结构,执行结构验证

type SignInUserData struct {
  Email    string `json:"email" validate:"required"`
  Password string `json:"password" validate:"required"`
}

如果我的错误是这样Map的:

validationErrors := err.(validator.ValidationErrors)

for _, fieldError := range validationErrors {
  fmt.println(fieldError.Field())
}

我得到字段名称,如“电子邮件”或“密码”。我希望返回的是字段的另一个名称,例如**“Email”变成“Email Address”,或者“Password”变成“Secret”**。
有办法吗?感谢您的评分

igsr9ssn

igsr9ssn1#

您可以使用(*Validate).RegisterTagNameFunc注册一个函数来获取StructFields的备用名称。
例如,注册一个函数以从name标记中获取备用名称:

package main

import (
    "fmt"
    "reflect"

    "github.com/go-playground/validator/v10"
)

type SignInUserData struct {
    Email    string `json:"email" validate:"required" name:"Email Address"`
    Password string `json:"password" validate:"required" name:"Secret"`
}

func main() {
    validate := validator.New()
    validate.RegisterTagNameFunc(func(field reflect.StructField) string {
        return field.Tag.Get("name")
    })

    data := &SignInUserData{}

    err := validate.Struct(data)
    if err != nil {
        validationErrors, ok := err.(validator.ValidationErrors)
        if ok {
            for _, fieldError := range validationErrors {
                fmt.Println(fieldError.Field())
            }
        }
    }
}

相关问题