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 最新版本
来源:oschina
链接:https://my.oschina.net/u/940352/blog/598641