فهرست منبع

feat(context): add idiomatic binding functions for clear err managment

Javier Provecho 8 سال پیش
والد
کامیت
73e5fcd855
2فایلهای تغییر یافته به همراه27 افزوده شده و 6 حذف شده
  1. 13 5
      context.go
  2. 14 1
      deprecated.go

+ 13 - 5
context.go

@@ -344,14 +344,22 @@ func (c *Context) BindJSON(obj interface{}) error {
 	return c.BindWith(obj, binding.JSON)
 	return c.BindWith(obj, binding.JSON)
 }
 }
 
 
-// BindWith binds the passed struct pointer using the specified binding engine.
+// MustBindWith binds the passed struct pointer using the specified binding
+// engine. It will abort the request with HTTP 400 if any error ocurrs.
 // See the binding package.
 // See the binding package.
-func (c *Context) BindWith(obj interface{}, b binding.Binding) error {
-	if err := b.Bind(c.Request, obj); err != nil {
+func (c *Context) MustBindWith(obj interface{}, b binding.Binding) (err error) {
+	if err = c.ShouldBindWith(obj, b); err != nil {
 		c.AbortWithError(400, err).SetType(ErrorTypeBind)
 		c.AbortWithError(400, err).SetType(ErrorTypeBind)
-		return err
 	}
 	}
-	return nil
+
+	return
+}
+
+// ShouldBindWith binds the passed struct pointer using the specified binding
+// engine.
+// See the binding package.
+func (c *Context) ShouldBindWith(obj interface{}, b binding.Binding) error {
+	return b.Bind(c.Request, obj)
 }
 }
 
 
 // ClientIP implements a best effort algorithm to return the real client IP, it parses
 // ClientIP implements a best effort algorithm to return the real client IP, it parses

+ 14 - 1
deprecated.go

@@ -4,9 +4,22 @@
 
 
 package gin
 package gin
 
 
-import "log"
+import (
+	"github.com/gin-gonic/gin/binding"
+	"log"
+)
 
 
 func (c *Context) GetCookie(name string) (string, error) {
 func (c *Context) GetCookie(name string) (string, error) {
 	log.Println("GetCookie() method is deprecated. Use Cookie() instead.")
 	log.Println("GetCookie() method is deprecated. Use Cookie() instead.")
 	return c.Cookie(name)
 	return c.Cookie(name)
 }
 }
+
+// BindWith binds the passed struct pointer using the specified binding engine.
+// See the binding package.
+func (c *Context) BindWith(obj interface{}, b binding.Binding) error {
+	log.Println(`BindWith(\"interface{}, binding.Binding\") error is going to
+	be deprecated, please check issue #662 and either use MustBindWith() if you
+	want HTTP 400 to be automatically returned if any error occur, of use
+	ShouldBindWith() if you need to manage the error.`)
+	return c.MustBindWith(obj, b)
+}