You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

78 lines
1.7 KiB

4 years ago
package tools
import (
"errors"
"strings"
"github.com/gin-gonic/gin"
"github.com/go-playground/locales/zh"
ut "github.com/go-playground/universal-translator"
4 years ago
"github.com/go-playground/validator/v10"
zhTran "github.com/go-playground/validator/v10/translations/zh"
4 years ago
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") {
3 years ago
err := c.BindJSON(p)
4 years ago
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参数内容不支持解析")
}
}