package tools import ( "errors" "strings" "github.com/gin-gonic/gin" "github.com/go-playground/locales/zh" ut "github.com/go-playground/universal-translator" "github.com/go-playground/validator/v10" zhTran "github.com/go-playground/validator/v10/translations/zh" jsoniter "github.com/json-iterator/go" ) var _validate *validator.Validate func init() { } func validate(s interface{}) error { zhCh := zh.New() uni := ut.New(zhCh) trans, _ := uni.GetTranslator("zh") _validate = validator.New() zhTran.RegisterDefaultTranslations(_validate, trans) err := _validate.Struct(s) if err != nil { for _, err := range err.(validator.ValidationErrors) { return errors.New(err.Translate(trans)) } } return nil } func ParseParams(p interface{}, c *gin.Context) error { ct := strings.ToLower(c.Request.Header.Get("Content-Type")) if strings.Contains(ct, "application/json") { body, _ := c.Get("recook") if body != nil { err := jsoniter.Unmarshal(body.([]byte), p) if err != nil { return err } return validate(p) } else { return nil } } else if strings.Contains(ct, "form-data") { err := c.Bind(p) if err != nil { return err } return validate(p) } else { return errors.New("当前HTTP参数内容不支持解析") } } func Params(p interface{}, c *gin.Context) error { ct := strings.ToLower(c.Request.Header.Get("Content-Type")) if strings.Contains(ct, "application/json") { err := c.BindJSON(p) if err != nil { return err } return validate(p) } else if strings.Contains(ct, "form-data") { err := c.Bind(p) if err != nil { return err } return validate(p) } else { return errors.New("当前HTTP参数内容不支持解析") } }