在go中使用Gin框架的时候,我们可以通过bindjson将请求体与结构体绑定。
常用字段说明:
1.required
用法:binding:"required" 说明:字段必须存在,不能为空。
Go
Name string `json:"name" binding:"required"`
2.len
用法:binding:"len=xx" 说明:验证字符串、数组或切片的长度是否等于指定长度。
Go
Code string `json:"code" binding:"len=6"` // 长度必须为 6
3.min和mix
用法:binding:"min=xx" 和 binding:"max=xx"
说明:适用于数字和字符串;对于数字,限制最小或最大值;对于字符串,限制最小或最大字符数。
Go
Age int `json:"age" binding:"min=1,max=100"`
4.gte和lte、gt和lt、ne
用法:binding:"gte=xx" 和 binding:"lte=xx"
说明:gte 表示"greater than or equal"(大于等于),lte 表示"小于等于"。ne 表示不等于。常用于数字和时间。
Go
Age int `json:"age" binding:"gte=18,lte=65"`
5.oneof
用法:binding:"gte=xx" 和 binding:"lte=xx"
说明:gte 表示"greater than or equal"(大于等于),lte 表示"小于等于"。ne 表示不等于。常用于数字和时间。
Go
Age int `json:"age" binding:"gte=18,lte=65"`
6.email
用法:binding:"email"
说明:验证字段是否是有效的电子邮件格式。
Go
Email string `json:"email" binding:"required,email"`
7.url
用法:binding:"url"
说明:验证字段是否为有效的 URL。
Go
Website string `json:"website" binding:"url"`
示例代码:
使用 BindJSON 并配合 binding 标签验证请求体数据的完整示例:
Go
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
type User struct {
ID string `json:"id" binding:"required"`
Age int `json:"age" binding:"gte=0,lte=130"`
Email string `json:"email" binding:"required,email"`
Password string `json:"password" binding:"min=8"`
}
func main() {
router := gin.Default()
router.POST("/user", func(c *gin.Context) {
var user User
if err := c.ShouldBindJSON(&user); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
// Process user data
c.JSON(http.StatusOK, gin.H{"status": "User validated and processed"})
})
router.Run(":8080")
}
运行效果:
当发送带有错误字段的 JSON 请求时,会自动返回相应的错误信息,例如:
Go
{
"error": "Key: 'User.Email' Error:Field validation for 'Email' failed on the 'email' tag"
}
总结:
(1)使用 binding 标签定义验证规则,简洁且自动验证请求数据。
(2)ShouldBindJSON/BindJSON 可将错误自动绑定到结构体。
(3)若请求字段验证失败,Gin 会返回详细的错误消息。