关于golang:goplaygroundvalidatorv10-自定义错误内容

13次阅读

共计 1772 个字符,预计需要花费 5 分钟才能阅读完成。

当咱们援用了 go-playground/validator/v10 库并且配置了如下内容并配置了中文:

    Name  string `json:"name" validate:"required"

那么他的返回信息如下:

Name 为必填字段

仍然不是很敌对,这个时候咱们就须要自定义谬误内容:

名称为必填字段

代码如下:

package utils

import (
    CN_ZH "github.com/go-playground/locales/zh"
    ut "github.com/go-playground/universal-translator"
    "github.com/go-playground/validator/v10"
    zhTranslations "github.com/go-playground/validator/v10/translations/zh"
    "reflect"
)

var Validate *validator.Validate

// Validate/v10 全局验证器
var trans ut.Translator

// 初始化 Validate/v10 国际化
func init() {zh := CN_ZH.New()
    uni := ut.New(zh, zh)
    trans, _ = uni.GetTranslator("zh")

    Validate = validator.New()

    // 通过 label 标签返回自定义谬误内容
    Validate.RegisterTagNameFunc(func(field reflect.StructField) string {label := field.Tag.Get("label")
        if label == "" {return field.Name}
        return label
    })
    zhTranslations.RegisterDefaultTranslations(Validate, trans)

    // 自定义 required_if 谬误内容
    Validate.RegisterTranslation("required_if", trans, func(ut ut.Translator) error {return ut.Add("required_if", "{0} 为必填字段!", false) // see universal-translator for details
    }, func(ut ut.Translator, fe validator.FieldError) string {t, _ := ut.T("required_if", fe.Field())
        return t
    })

}

// 测验并返回测验错误信息
func Translate(err error) (errMsg string) {errs := err.(validator.ValidationErrors)
    for _, err := range errs {errMsg = err.Translate(trans)
    }
    return
}

struct 配置如下:

    Name  string `json:"name" validate:"required" label:"路由 name"`

此时返回的内容为:

路由 name 为必填字段

测验代码如下:

var menu model.SysMenu
_ = c.ShouldBindJSON(&menu)
if err := utils.Validate.Struct(menu); err != nil {response.FailWithMessage(utils.Translate(err), c)
        return
}

坑点:
当我想应用 required_if 进行判断时候,发现 v10 库没有加上 required_if 这个标签,那么你须要自定义:

// 自定义 required_if 谬误内容
    Validate.RegisterTranslation("required_if", trans, func(ut ut.Translator) error {return ut.Add("required_if", "{0} 为必填字段!", false) // see universal-translator for details
    }, func(ut ut.Translator, fe validator.FieldError) string {t, _ := ut.T("required_if", fe.Field())
        return t
    })
正文完
 0