-
-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Closed
Labels
Description
I'd like to suggest that adding a practice to the document.
- CustomBinder - Json Binding with validation
type ValidateBinder struct{}
func (ValidateBinder) Bind(i interface{}, c echo.Context) (err error) {
rq := c.Request()
ct := rq.Header().Get(echo.ContentType)
err = echo.ErrUnsupportedMediaType
if strings.HasPrefix(ct, echo.ApplicationJSON) {
if err = json.NewDecoder(rq.Body()).Decode(i); err != nil {
return
}
if tagName := c.Get("ValidateTagName"); tagName == nil {
c.Set("ValidateTagName", "validate")
}
config := &validator.Config{TagName: c.Get("ValidateTagName").(string)}
validate := validator.New(config)
if err = validate.Struct(i); err != nil {
return
}
}
return
}- Set CustomBinder
e := echo.New()
e.SetBinder(&ValidateBinder{})- How to Use
type User struct {
ID int64 `json:"id" validate:"required"`
Email string `json:"email" validate:"required,email"`
}
func MyFunc() echo.HandlerFunc {
return func(c echo.Context) (err error) {
user := new(model.User)
c.Set("ValidateTagName", "validate")
if err = c.Bind(user); err != nil {
return echo.NewHTTPError(fasthttp.StatusBadRequest, "Request parameters are invalid.")
}
}
}muei, LuisUrrutia, jketcham, easykoo, wuxinwei and 10 more