当咱们援用了go-playground/validator/v10库并且配置了如下内容并配置了中文:
Name string `json:"name" validate:"required"
那么他的返回信息如下:
Name为必填字段
仍然不是很敌对,这个时候咱们就须要自定义谬误内容:
名称为必填字段
代码如下:
package utilsimport ( 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 })