gin框架下参数的自定义验证小示例
在验证用户传递来的参数时,可以用gin框架的数据验证,可以不用解析数据,减少if else,会简洁许多。如下:
package mainimport ("fmt""time""github.com/gin-gonic/gin"
)//Person ..
type Person struct {//不能为空并且大于10Age int `form:"age" binding:"required,gt=10"`Name string `form:"name" binding:"required"`Birthday time.Time `form:"birthday" time_format:"2006-01-02" time_utc:"1"`
}func main() {r := gin.Default()r.GET("/5lmh", func(c *gin.Context) {var person Personif err := c.ShouldBind(&person); err != nil {c.String(500, fmt.Sprint(err))return}c.String(200, fmt.Sprintf("%#v", person))})r.Run()
}
也可以自定义验证函数验证:
第一步,编写验证函数,如:
第二步:注册自定义函数到Validate;
第三步:绑定到要验证的字段。
实例代码如下:
package mainimport ("net/http""reflect""github.com/gin-gonic/gin""github.com/gin-gonic/gin/binding""gopkg.in/go-playground/validator.v8"
)/*对绑定解析到结构体上的参数,自定义验证功能比如我们要对 name 字段做校验,要不能为空,并且不等于 admin ,类似这种需求,就无法 binding 现成的方法需要我们自己验证方法才能实现 官网示例(https://godoc.org/gopkg.in/go-playground/validator.v8#hdr-Custom_Functions)这里需要下载引入下 gopkg.in/go-playground/validator.v8
*/
type Person struct {Age int `form:"age" binding:"required,gt=10"`// 2、在参数 binding 上使用自定义的校验方法函数注册时候的名称Name string `form:"name" binding:"NotNullAndAdmin"`Address string `form:"address" binding:"required"`
}// 1、自定义的校验方法
func nameNotNullAndAdmin(v *validator.Validate, topStruct reflect.Value, currentStructOrField reflect.Value, field reflect.Value, fieldType reflect.Type, fieldKind reflect.Kind, param string) bool {if value, ok := field.Interface().(string); ok {// 字段不能为空,并且不等于 adminreturn value != "" && !("5lmh" == value)}return true
}func main() {r := gin.Default()// 3、将我们自定义的校验方法注册到 validator中if v, ok := binding.Validator.Engine().(*validator.Validate); ok {// 这里的 key 和 fn 可以不一样最终在 struct 使用的是 keyv.RegisterValidation("NotNullAndAdmin", nameNotNullAndAdmin)}/*curl -X GET "http://127.0.0.1:8080/testing?name=&age=12&address=beijing"curl -X GET "http://127.0.0.1:8080/testing?name=lmh&age=12&address=beijing"curl -X GET "http://127.0.0.1:8080/testing?name=adz&age=12&address=beijing"*/r.GET("/5lmh", func(c *gin.Context) {var person Personif e := c.ShouldBind(&person); e == nil {c.String(http.StatusOK, "%v", person)} else {c.String(http.StatusOK, "person bind err:%v", e.Error())}})r.Run()
}
gin框架下参数的自定义验证小示例相关推荐
- 关于将struts2框架下,使自定义过滤器对部分的action(一个action或多个action)请求忽略的方法
关于将struts2框架下,使自定义过滤器对部分的action请求忽略的方法 首先需要了解一个方法 request.getServletPath() 他将返回一个当前请求的路径的醉详细名称 例如对路径 ...
- SSM框架下实现验证码图片验证功能(源码)
SSM框架下实现验证码图片验证功能 背景图片资源路径 https://download.csdn.net/download/hero_qhz/10322064 一.首先,在pom里面加上需要用的资源j ...
- Enterprise Library +Caliburn.Micro+WPF CM框架下使用企业库验证,验证某一个属性,整个页面的文本框都变红的原因...
我用的是CM这个框架做的WPF,在用企业库的验证的时候,我用标签的方式给一个属性加了不能为空的验证,但整个页面的所有控件的外面框都变红了.原因是CM框架的绑定方式是直接X:Name="你的属 ...
- Spring MVC 自定义验证器示例
在任何 spring web mvc 应用程序中,我们经常必须处理表单.应用程序首先显示一个表单,然后用户填写该表单并将其提交给服务器.在服务器上,应用程序需要捕获表单输入并处理输入(例如,存储在数据 ...
- Go Gin框架请求自动验证和数据绑定,看完这篇就会用了
之前做项目基本上公司是用 gRPC 和 echo 这两个框架的组合,后来 Gin 框架在Go圈越来越流行,陆续我在公司接触到的项目也开始有人用 Gin 框架开发了. 因为我也是偶尔开发,像Gin框架里 ...
- golang gin框架gorilla的websocket小案例
golang gin框架中gorilla的websocket案例 在gin框架下 导入包 "github.com/gorilla/websocket" r.GET("/t ...
- 关于微信小程序wepy框架下wx-charts的使用
wx-charts在微信小程序wepy框架下的使用 wx-charts 微信小程序主流的图表工具 基于 Canvas,体积小 支持图表类型 饼图 pie 圆环图 ring 线图 line,scroll ...
- go+vue——基于gin框架和gorm的web开发实战
go+vue--基于gin框架和gorm的web开发实战 gin框架 视频.资料.笔记 安装Go环境, 添加环境变量(可能自动添加好) 下载 Go 环境变量 goland 报错: GOROOT is ...
- Gin框架使用Zap接收日志
前言 日志对于项目重要性不言而喻,如果用过Gin框架大家都知道,Gin框架中自带日志logger:可以文件和控制台输出,但性能和功能远不如Zap. 一.Gin使用默认日志中间件 下面简单写个例子 fu ...
- 在Qt Designer中使用自定义Widgets小部件
在Qt Designer中使用自定义Widgets 在Qt Designer中使用自定义Widgets 处理自定义Widgets小部件 推广Widgets小部件 用户定义的自定义小部件 在Qt Des ...
最新文章
- 10 个神奇的网站显示超强的 HTML5 技术
- ESXi上的固态硬盘识别为非SSD
- GridView中实现单选RadioButton
- LeetCode 508. Most Frequent Subtree Sum
- 文巾解题 1816. 截断句子
- python startswith
- Linux下画原理图和PCB
- ntop linux,Linux下开源监控软件Ntop的性能提升方案
- java捕捉了异常_java 异常捕获与异常处理
- 一个电脑同时运行 64bit 和 32bit 的eclipse 如何匹配 jdk环境
- 「leetcode」738.单调递增的数字【贪心算法】详细讲解!
- NeurIPS 2021 | 医学图像生成新范式!在Noisy Data上训练出超越监督学习的模型
- PowerBI-关系函数-RELATED RELATEDTABLE
- Ubuntu上安装Chrome浏览器
- SpringCloud狂神说学习笔记(一)
- DirectAdmin安装Zend Optimizer
- Could not get a resource since the pool is exhausted
- C++ MFC日志Log类 棒棒的 控制台或文件或一起输出
- influxdb基础(五)——数据的备份与恢复(influxd backup/influxd restore)
- 2018 Android开发面试经历