为echo添加简单的binding 验证

echo 框架的binder 比较简单,只是做了json 和 xml 的验证,再深入下去就木有了。记得 echo 源码中 有 SetBinder接口,so,搞起

拿gin框架的binding 做参考,他是用的 gopkg.in/bluesuncorp/validator.v5 这个包,然后做对应的STRUCT

import (
    "gin-gonic/gin/tree/master/binding"
	"net/http"
)

type EchoBinder struct {
}

func (EchoBinder) Bind(r *http.Request, i interface{}) (err error) {
	b := bining.Default(r.Method, r.Header.Get("Content-Type"))
	err = b.Bind(r, i)
	return
}

OK,写完,测试,嵌入到echo

type User struct {
	Email   string `json:"email" binding:"required,email"`
	Name string `json:"name" binding:"required"`
}

// Handler
func hello(c *echo.Context) error {
	u := &User{}
	err := c.Bind(u)
	if err != nil{
	   return c.JSON(200, err.Error())
	}
	return c.JSON(200, u)
}

func main() {
	// Echo instance
	e := echo.New()
	e.SetBinder(&binding.EchoBinder{})
	// Middleware
	e.Use(mw.Logger())
	e.Use(mw.Recover())

	// Routes
	e.Any("/", hello)

	// Start server
	e.Run(":1234")
}

POSTMAN 测试下, post {"email":"hello email"},出现 验证错误,email 格式错误。

现在,可以组合自己想要的验证库,个人建议使用 gopkg.in/go-playground/validator.v8 最新版本



你可能感兴趣的:(为echo添加简单的binding 验证)