首页 > 编程学习 > gin binding方法汇总

gin binding方法汇总

发布时间:2022/11/20 13:28:18

为了能够更方便的获取请求相关参数,提高开发效率,gin框架提供了Bind系列方法。

分类

Bind系列方法大致分两类:

  1. Should类型
  2. Must类型

二者的区别就是:should和must的区别,即must绑定失败会报错

关系图

Should类型

在这里插入图片描述

Must类型

在这里插入图片描述

ShouldBindBodyWith

在这里插入图片描述
假设有这样的场景:

  1. 请求体中的数据分为:校验用数据和接口用数据
  2. 校验用数据绑定给auth中间件的结构体,api用数据绑定为api结构体
  3. 一个请求上下分则需要绑定两次,但request.Body只可读取一次

此时,shouldBindBodyWith就应用而生:

  1. ShouldBindBodyWith is similar with ShouldBindWith, but it stores the request
    body into the context, and reuse when it is called again.
  2. 将request.body再次存储在上下文中
  3. 后续调用都得使用该方法

校验器

  1. gin框架使用github.com/go-playground/validator进行参数校验。
  2. 文档:validator
  3. github:validator

简单示例

type SignUpParam struct {
	Age        uint8  `json:"age" binding:"gte=1,lte=130"`
	Name       string `json:"name" binding:"required"`
	Email      string `json:"email" binding:"required,email"`
	Password   string `json:"password" binding:"required"`
	RePassword string `json:"re_password" binding:"required,eqfield=Password"`
	Date       string `json:"date" binding:"required,datetime=2006-01-02`
}

此时,若gin的Bind方法会根据binding标签校验字段

自定义校验器

  1. 定义校验规则
func customFunc(fl validator.FieldLevel) bool {
	date, err := time.Parse("2006-01-02", fl.Field().String())
	if err != nil {
		return false
	}
	if date.Before(time.Now()) {
		return false
	}
	return true
}
  1. 注册到validator引擎中
func InitTrans(locale string) (err error) {
	// 修改gin框架中的Validator引擎属性,实现自定制
	if v, ok := binding.Validator.Engine().(*validator.Validate); ok {
    	// 在校验器注册自定义的校验方法(名字,校验钩子)
		if err := v.RegisterValidation("checkDate", customFunc); err != nil {
			return err
		}
}
Copyright © 2010-2022 dgrt.cn 版权所有 |关于我们| 联系方式