github.com/unionj-cloud/go-doudou@v1.3.8-0.20221011095552-0088008e5b31/framework/http/validate.go (about) 1 package ddhttp 2 3 import ( 4 ut "github.com/go-playground/universal-translator" 5 "github.com/go-playground/validator/v10" 6 "github.com/pkg/errors" 7 "github.com/unionj-cloud/go-doudou/toolkit/stringutils" 8 "strings" 9 ) 10 11 var validate = validator.New() 12 var translator ut.Translator 13 14 func GetValidate() *validator.Validate { 15 return validate 16 } 17 18 func GetTranslator() ut.Translator { 19 return translator 20 } 21 22 func SetTranslator(trans ut.Translator) { 23 translator = trans 24 } 25 26 func handleValidationErr(err error) error { 27 if err == nil { 28 return nil 29 } 30 errs, ok := err.(validator.ValidationErrors) 31 if !ok { 32 return err 33 } 34 translations := errs.Translate(translator) 35 var errmsgs []string 36 for _, v := range translations { 37 errmsgs = append(errmsgs, v) 38 } 39 return errors.New(strings.Join(errmsgs, ", ")) 40 } 41 42 func ValidateStruct(value interface{}) error { 43 return handleValidationErr(validate.Struct(value)) 44 } 45 46 func ValidateVar(value interface{}, tag, param string) error { 47 if stringutils.IsNotEmpty(param) { 48 return errors.Wrap(handleValidationErr(validate.Var(value, tag)), param) 49 } 50 return handleValidationErr(validate.Var(value, tag)) 51 }