Gin怎么做参数校验
在 Gin 框架中,你可以使用 binding 和 validator 包来进行参数校验。
- 定义请求参数的结构体:
type CreateUserRequest struct {Username string `json:"username" binding:"required,alphanum,min=4,max=20"`Email string `json:"email" binding:"required,email"`Password string `json:"password" binding:"required,min=6"`
}
在上述结构体中,使用 binding 标签定义了参数的验证规则。例如,username 必须是字母和数字的组合,且长度在 4 到 20 之间;email 必须是有效的电子邮件地址;password 的长度至少为 6。
- 在路由处理函数中进行参数校验:
func CreateUser(c *gin.Context) {var req CreateUserRequestif err := c.ShouldBindJSON(&req); err != nil {c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})return}// 在这里处理用户创建逻辑,req 中已经是经过验证的参数// ...
}
在处理函数中,通过 c.ShouldBindJSON 将请求的 JSON 数据绑定到结构体中,并自动进行参数校验。如果参数不符合规则,将返回 http.StatusBadRequest 错误响应。
- 自定义验证器(可选):
// 自定义邮箱格式验证器
var validate *validator.Validatefunc init() {validate = validator.New()validate.RegisterValidation("email_custom", func(fl validator.FieldLevel) bool {email := fl.Field().String()return strings.Contains(email, "@example.com")})
}// 在结构体中使用自定义验证器
type CreateUserRequest struct {Email string `json:"email" binding:"required,email_custom"`
}
在这个例子中,我们注册了一个自定义的邮箱验证器 email_custom,然后在结构体中使用该验证器。