package validate import ( "yitao/ecode" "github.com/go-playground/locales/zh" ut "github.com/go-playground/universal-translator" "github.com/go-playground/validator/v10" "github.com/kataras/iris/v12" ) var validate *validator.Validate var trans ut.Translator type ParamInterface interface { Default() } func InitValidator() { validate = validator.New() eng := zh.New() uni := ut.New(eng, eng) trans, _ = uni.GetTranslator("zh") addTranslation("min", "{0} 长度必须至少为 {1} 个字符") addTranslation("max", "{0} 长度不能超过 {1} 个字符") addTranslation("len", "{0} 长度应该为 {1} 个字符") addTranslation("required", "{0} 不能为空") } func addTranslation(tag string, tr string) { validate.RegisterTranslation(tag, trans, func(ut ut.Translator) error { return ut.Add(tag, tr, true) }, func(ut ut.Translator, fe validator.FieldError) string { t, _ := ut.T(tag, fe.Field(), fe.Param()) return t }) } func GetValidator() *validator.Validate { return validate } func ReadJSON(ctx iris.Context, result ParamInterface) *ecode.Ecode { ctx.ReadBody(result) err := GetValidator().Struct(result) if err != nil { validateErr := err.(validator.ValidationErrors) firstValue := "" for _, v := range validateErr.Translate(trans) { firstValue = v break // 退出循环,确保只获取第一个元素 } return ecode.Set(255, firstValue) } // 填充默认值 result.Default() return ecode.OK() } func ReadQuery(ctx iris.Context, result ParamInterface) *ecode.Ecode { ctx.ReadQuery(result) err := GetValidator().Struct(result) if err != nil { validateErr := err.(validator.ValidationErrors) firstValue := "" for _, v := range validateErr.Translate(trans) { firstValue = v break // 退出循环,确保只获取第一个元素 } return ecode.Set(255, firstValue) } result.Default() return ecode.OK() }