12345678910111213141516171819202122232425262728293031323334353637383940 |
- package app
- import (
- "encoding/json"
- "errors"
- "fmt"
- "github.com/gin-gonic/gin"
- "github.com/go-playground/validator/v10"
- "strconv"
- "zhiyuan/pkg/logger"
- "zhiyuan/pkg/validate"
- )
- func Bind(c *gin.Context, request interface{}) error {
- // use origin
- //c.ShouldBind(request)
- //err := validate.Validate.Struct(request)
- // use built in
- err := c.ShouldBind(request)
- var errStr string
- if err != nil {
- switch err.(type) {
- case validator.ValidationErrors:
- errStr = validate.Translate(err.(validator.ValidationErrors))
- case *json.UnmarshalTypeError:
- unmarshalTypeError := err.(*json.UnmarshalTypeError)
- errStr = fmt.Errorf("%s 类型错误,期望类型 %s", unmarshalTypeError.Field, unmarshalTypeError.Type.String()).Error()
- case *strconv.NumError:
- numError := err.(*strconv.NumError)
- errStr = errors.New("\"" + numError.Num + "\" 必须为数字类型").Error()
- default:
- errStr = errors.New("未知错误").Error()
- }
- logger.Sugar.Error(err)
- ErrorMsg(c, errStr, nil)
- return err
- }
- return nil
- }
|