params.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package public
  2. import (
  3. "errors"
  4. "github.com/gin-gonic/gin"
  5. ut "github.com/go-playground/universal-translator"
  6. "github.com/go-playground/validator/v10"
  7. "strings"
  8. )
  9. const (
  10. ValidatorKey = "ValidatorKey"
  11. TranslatorKey = "TranslatorKey"
  12. )
  13. func DefaultGetValidParams(c *gin.Context, params interface{}) error {
  14. if err := c.ShouldBind(params); err != nil {
  15. return err
  16. }
  17. //获取验证器
  18. valid, err := GetValidator(c)
  19. if err != nil {
  20. return err
  21. }
  22. //获取翻译器
  23. trans, err := GetTranslation(c)
  24. if err != nil {
  25. return err
  26. }
  27. err = valid.Struct(params)
  28. if err != nil {
  29. errs := err.(validator.ValidationErrors)
  30. sliceErrs := []string{}
  31. for _, e := range errs {
  32. sliceErrs = append(sliceErrs, e.Translate(trans))
  33. }
  34. return errors.New(strings.Join(sliceErrs, ","))
  35. }
  36. return nil
  37. }
  38. func GetValidator(c *gin.Context) (*validator.Validate, error) {
  39. val, ok := c.Get(ValidatorKey)
  40. if !ok {
  41. return nil, errors.New("未设置验证器")
  42. }
  43. validator, ok := val.(*validator.Validate)
  44. if !ok {
  45. return nil, errors.New("获取验证器失败")
  46. }
  47. return validator, nil
  48. }
  49. func GetTranslation(c *gin.Context) (ut.Translator, error) {
  50. trans, ok := c.Get(TranslatorKey)
  51. if !ok {
  52. return nil, errors.New("未设置翻译器")
  53. }
  54. translator, ok := trans.(ut.Translator)
  55. if !ok {
  56. return nil, errors.New("获取翻译器失败")
  57. }
  58. return translator, nil
  59. }