Demo 学 Echo Part4 HTTP 请求的验证
HTTP请求的验证,采用了validator.v9
package main
import (
"net/http"
"github.com/labstack/echo"
"gopkg.in/go-playground/validator.v9"
)
type User struct {
Name string `json:"name" validate:"required"`
Email string `json:"email" validate:"required,email"`
Age int `json:"age" validate:"gte=0,lte=80"`
}
type CustomValidator struct {
validator *validator.Validate
}
func (cv *CustomValidator) Validate(i interface{}) error {
return cv.validator.Struct(i)
}
func main() {
e := echo.New()
e.Validator = &CustomValidator{validator: validator.New()}
e.POST("/users", func(c echo.Context) error {
u := new(User)
if err := c.Bind(u); err != nil {
return err
}
if err := c.Validate(u); err != nil {
return err
}
return c.JSON(http.StatusOK, true)
})
e.Logger.Fatal(e.Start(":9000"))
}
规则比较简单,name和email为必要项目,email还需要符合email规则;年龄>=0且<=80。
测试一下,能过返回true,否则返回{"message":"Internal Server Error"}且响应500.
curl -X POST http://localhost:9000/users \
-d 'name=Joe' \
-d 'email=nope@novalagung.com' \
-d 'age=100'
# output => {"message":"Internal Server Error"}
curl -X POST http://localhost:9000/users \
-d 'name=Joe' \
-d 'email=nope@novalagung.com' \
-d 'age=10'
#output => true
最后修改于 2019-08-17