Gin 使用 go-playground/validator.v8 进行验证,详细文档见 package validator

假设我们现在有一个用户登录的接口,使用 POST 方法接收 emailpassword 两个参数。

模型绑定

通过模型绑定,我们能将请求体绑定到类型

模型定义

定义一个名为 LoginForm 的结构体,将 eamilpassword 两个参数放置其中。

1
2
3
4
type LoginForm struct {
Email string
Password string
}

标签设置

对于绑定的字段,我们需要对其设置相应的绑定标签。

具体的标签列表可查看 官方文档

1
2
3
4
type LoginForm struct {
Email string `form:"email" binding:"required"` // 绑定表单类型的数据,且字段必须存在
Password string `form:"password" binding:"required"`
}

绑定方法

Must bind

一旦绑定失败则直接返回 400 错误。

相关方法:

  • Bind
  • BindJSON
  • BindQuery

Should bind

一旦失败,并不会立即响应 400 错误,而是将错误信息返回给上下文环境,开发者需要自行处理。

相关方法:

  • ShouldBind
  • ShouldBindJSON
  • ShouldBindQuery

完整代码

1
2
3
4
5
6
7
8
9
10
11
12
type LoginForm struct {
Email string `form:"email" binding:"required"`
Password string `form:"password" binding:"required"`
}

func Login(c *gin.Context) {
var loginForm LoginForm
err := c.ShouldBind(&loginForm)
if err != nil {
// 相关错误处理
}
}

参考资料