清风徐来
Michael's Blog
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