博客
关于我
gin框架中对前端传递的数据进行校验
阅读量:119 次
发布时间:2019-02-26

本文共 2534 字,大约阅读时间需要 8 分钟。

一、为什么要数据校验

  • 数据校验有点类似中间件的作用,使前端传递过来的数据更加合法的到达控制器,以减少数据在控制层中一个一个的校验。
  • 如果不使用数据校验,要不就自己手动的在控制器中一个一个的数据校验
  • go语言中是没有类似java一样的注解的方式来校验数据,但是可以在结构体中使用校验方法来校验(本人不是特别的喜欢这种方式,但是对于这门语言也只能这样)

二、在go语言中使用数据校验

  • 1、官网地址

    https://github.com/go-playground/validator
  • 2、安装依赖包

    go get github.com/go-playground/validator
  • 3、基础的使用参考官网

三、自定义校验器

  • 1、定义接收参数的结构体

    type UserInfo struct {     	Id   string `validate:"uuid" json:"id"`           //UUID 类型	Name string `validate:"checkName,required" json:"name"`     // 自定义校验	Age  uint8  `validate:"min=0,max=130,required" json:"age"` // 年龄}
  • 2、自定义方法

    func checkNameFunc(f validator.FieldLevel) bool {     	count := utf8.RuneCountInString(f.Field().String())	if count >= 2 && count <= 12 {     		return true	} else {     		return false	}}
  • 3、在init函数中注册方法

    var valildate *validator.Validatefunc init() {     	valildate = validator.New()	valildate.RegisterValidation("checkName", checkNameFunc)}
  • 4、在main函数中使用

    func main() {     	router := gin.Default()	router.POST("/register", func(c *gin.Context) {     		user := UserInfo{     }		//或者var user = UserInfo		err := c.Bind(&user)		if err != nil {     			c.JSON(http.StatusOK, gin.H{     				"code":    1,				"message": "请求参数错误",			})			return		}		err = valildate.Struct(user)		if err != nil {     			// 输出校验错误 .(validator.ValidationErrors)是断言			for _, e := range err.(validator.ValidationErrors) {     				fmt.Println("错误字段:", e.Field())				fmt.Println("错误的值:", e.Value())				fmt.Println("错误的tag:", e.Tag())			}			c.JSON(http.StatusOK, gin.H{     				"code":    1,				"message": "数据校验错误",			})			return		}		fmt.Println(user, "接收的数据")		c.JSON(http.StatusOK, gin.H{     			"code":    0,			"message": "请求成功",		})	})	router.Run(":8000")}

四、对于多层嵌套数据的校验

  • 1、对于多层结构体的数据校验使用dive

  • 2、入参的结构体

    type UserInfo struct {     	Id   string `validate:"uuid" json:"id"`           //UUID 类型	Name string `validate:"checkName,required" json:"name"`     // 自定义校验	Age  uint8  `validate:"min=0,max=130,required" json:"age"` // 年龄	Address []Address `validate:"dive" json:"address"` // 收货地址}type Address struct {     	Province string `json:"province" validate:"required"` // 省份	City string `json:"city" validate:"required"` // 市	County string `json:"county" validate:"required"` //县	Mobile string `json:"mobile" validate:"numeric,len=11"` // 手机号码}
  • 3、使用postman提交数据

    {    "name": "admin",    "age": 20,    "id": "3f7a783f-f9dc-4db8-9c6b-afe1d3f9b3f7",    "address": [        {            "province": "广东省",            "city":"深圳市",            "county": "宝安区",            "mobile": "18112345678"        }    ]}
  • 4、别的和上面一样的结构

转载地址:http://tnvf.baihongyu.com/

你可能感兴趣的文章
mysql中的字段如何选择合适的数据类型呢?
查看>>
MySQL中的字符集陷阱:为何避免使用UTF-8
查看>>
mysql中的数据导入与导出
查看>>
MySQL中的时间函数
查看>>
mysql中的约束
查看>>
MySQL中的表是什么?
查看>>
mysql中穿件函数时候delimiter的用法
查看>>
Mysql中索引的分类、增删改查与存储引擎对应关系
查看>>
Mysql中索引的最左前缀原则图文剖析(全)
查看>>
MySql中给视图添加注释怎么添加_默认不支持_可以这样取巧---MySql工作笔记002
查看>>
Mysql中获取所有表名以及表名带时间字符串使用BetweenAnd筛选区间范围
查看>>
Mysql中视图的使用以及常见运算符的使用示例和优先级
查看>>
Mysql中触发器的使用示例
查看>>
Mysql中设置只允许指定ip能连接访问(可视化工具的方式)
查看>>
mysql中还有窗口函数?这是什么东西?
查看>>
mysql中间件
查看>>
MYSQL中频繁的乱码问题终极解决
查看>>
MySQL为Null会导致5个问题,个个致命!
查看>>
MySQL为什么不建议使用delete删除数据?
查看>>
MySQL主从、环境搭建、主从配制
查看>>