request.go 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package app
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "fmt"
  6. "github.com/gin-gonic/gin"
  7. "github.com/go-playground/validator/v10"
  8. "strconv"
  9. "zhiyuan/pkg/logger"
  10. "zhiyuan/pkg/validate"
  11. )
  12. func Bind(c *gin.Context, request interface{}) error {
  13. // use origin
  14. //c.ShouldBind(request)
  15. //err := validate.Validate.Struct(request)
  16. // use built in
  17. err := c.ShouldBind(request)
  18. var errStr string
  19. if err != nil {
  20. switch err.(type) {
  21. case validator.ValidationErrors:
  22. errStr = validate.Translate(err.(validator.ValidationErrors))
  23. case *json.UnmarshalTypeError:
  24. unmarshalTypeError := err.(*json.UnmarshalTypeError)
  25. errStr = fmt.Errorf("%s 类型错误,期望类型 %s", unmarshalTypeError.Field, unmarshalTypeError.Type.String()).Error()
  26. case *strconv.NumError:
  27. numError := err.(*strconv.NumError)
  28. errStr = errors.New("\"" + numError.Num + "\" 必须为数字类型").Error()
  29. default:
  30. errStr = errors.New("未知错误").Error()
  31. }
  32. logger.Sugar.Error(err)
  33. ErrorMsg(c, errStr, nil)
  34. return err
  35. }
  36. return nil
  37. }