网站开发要怎么学,公司网页制作报价,购物网站建设新闻,深圳网站优化费用文章目录 前言一、基础用法二、常用字段说明常用字段说明1. required2. len3. min 和 max4. gte 和 lte 、 gt 和 lt 、ne5. oneof6. email7. url 三、示例代码运行效果 总结 前言
在 Go 中使用 Gin 框架时#xff0c;BindJSON 可以将 JSON 请求体中的数据绑定到结构体上required2. len3. min 和 max4. gte 和 lte 、 gt 和 lt 、ne5. oneof6. email7. url 三、示例代码运行效果 总结 前言
在 Go 中使用 Gin 框架时BindJSON 可以将 JSON 请求体中的数据绑定到结构体上配合 binding 标签还可以进行验证。其主要是通过validator库实现 在Gin的bind/json.go文件中可以看到 validator方法是https://github.com/go-playground/validator/tree/v10.6.1包中的。 所以实际上gin中binding 验证的方法是使用validator实现的
这样可以快速的实现多种验证条件而不需要额外的去写验证方法。 Gin 支持多种验证规则可以通过 binding 标签在结构体字段上定义。下面我们来看一下有哪些验证方法吧。 一、基础用法
假设我们有一个 User 结构体来接收 JSON 数据 request.go
type User struct {ID string json:id binding:required // 必须字段Age int json:age binding:gte0,lte130 // 年龄范围Email string json:email binding:required,email // 必须是合法的电子邮件地址Password string json:password binding:min8 // 密码至少8字符
}
controller.go
req : User{}
if err : c.BindJson(req); err ! nil {fmt.Println(err)return
}在BindJson中如果验证有问题则会报出err错误并显示详细的错误原因。
二、常用字段说明
常用字段说明
1. required
用法binding:required说明字段必须存在不能为空。示例Name string json:name binding:required2. len
用法binding:lenxx说明验证字符串、数组或切片的长度是否等于指定长度。示例Code string json:code binding:len6 // 长度必须为 63. min 和 max
用法binding:minxx 和 binding:maxxx说明适用于数字和字符串对于数字限制最小或最大值对于字符串限制最小或最大字符数。示例Age int json:age binding:min1,max1004. gte 和 lte 、 gt 和 lt 、ne
用法binding:gtexx 和 binding:ltexx说明gte 表示“greater than or equal”大于等于lte 表示“小于等于”。ne 表示不等于。常用于数字和时间。示例Age int json:age binding:gte18,lte655. oneof
用法binding:oneofxx xx xx说明验证字段值必须是列表中的一个常用于枚举值。示例Status int json:status binding:oneof0 1 26. email
用法binding:email说明验证字段是否是有效的电子邮件格式。示例Email string json:email binding:required,email7. url
用法binding:url说明验证字段是否为有效的 URL。示例Website string json:website binding:url三、示例代码
使用 BindJSON 并配合 binding 标签验证请求体数据的完整示例
package mainimport (github.com/gin-gonic/ginnet/http
)type User struct {ID string json:id binding:requiredAge int json:age binding:gte0,lte130Email string json:email binding:required,emailPassword string json:password binding:min8
}func main() {router : gin.Default()router.POST(/user, func(c *gin.Context) {var user Userif err : c.ShouldBindJSON(user); err ! nil {c.JSON(http.StatusBadRequest, gin.H{error: err.Error()})return}// Process user datac.JSON(http.StatusOK, gin.H{status: User validated and processed})})router.Run(:8080)
}运行效果
当发送带有错误字段的 JSON 请求时会自动返回相应的错误信息例如
{error: Key: User.Email Error:Field validation for Email failed on the email tag
}总结
使用 binding 标签定义验证规则简洁且自动验证请求数据。ShouldBindJSON/BindJSON 可将错误自动绑定到结构体。若请求字段验证失败Gin 会返回详细的错误消息。 本文是经过个人查阅相关资料后理解的提炼可能存在理论上理解偏差的问题如果您在阅读过程中发现任何问题或有任何疑问请不吝指出我将非常感激并乐意与您讨论。谢谢您的阅读