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 }