收藏文章 楼主

go validator参数校验器自定义规则及提示(自定义异常返回提示语)

版块:AIGC   类型:普通   作者:AI绘图   查看:105   回复:0   获赞:0   时间:2023-11-01 03:07:46

原文连接:https://segmentfault.com/a/1190000040445612
笔者针对参数为指针的情况做了一点小优化

这里我们用validator用来做参数校验,gin默认的github.com/go-playground/validator,可以直接使用

除此之外还有一些其他的工具也挺好用的,例如:

  • github.com/asaskevich/govalidator

这里笔者就使用gin默认的了

然后开始使用,我们可以用来校验结构体

type UserBasic struct {utils.ProcessErr(userParams, err)
    UserId        uint64 `gorm:"column:user_id" json:"userId"`
    UserNumber    string `gorm:"column:user_number" json:"userNumber"`
    Name          string `validate:"required" reg_error_info:"姓名不能为空"`
    Age           uint8  `validate:"lt=0|gt=150" reg_error_info:"年龄不合法"`
    PassWord      string `gorm:"column:password" json:"password"`
    PhoneNum      string `validate:"RegexPhone" reg_error_info:"手机号格式不正确"`
    Email         string `validate:"email" reg_error_info:"email为空或格式不正确"`
  ...其他省略
}

这时一般返回的错误是这样的

image-20230130225947389

当然这样不友好,我们希望能够返回自定义的提醒信息,我们封装一个方法即可

// ProcessErr go validator参数校验器自定义规则及提示
func ProcessErr(u interface{}, err error) string {
	if err == nil { //如果为nil 说明校验通过
		return ""
	}
	invalid, ok := err.(*validator.InvalidValidationError) //如果是输入参数无效,则直接返回输入参数错误
	if ok {
		return "输入参数错误:" + invalid.Error()
	}
	validationErrs := err.(validator.ValidationErrors) //断言是ValidationErrors
	for _, validationErr := range validationErrs {
		fieldName := validationErr.Field() //获取是哪个字段不符合格式
		typeOf := reflect.TypeOf(u)
		// 如果是指针,获取其属性
		if typeOf.Kind() == reflect.Ptr {
			typeOf = typeOf.Elem()
		}
		field, ok := typeOf.FieldByName(fieldName) //通过反射获取filed
		if ok {
			errorInfo := field.Tag.Get("reg_error_info") // 获取field对应的reg_error_info tag值
			return fieldName + ":" + errorInfo           // 返回错误
		} else {
			return "缺失reg_error_info"
		}
	}
	return ""
}

再调用我们的方法即可

// 参数校验
validate := validator.New()
// 自定义校验
validate.RegisterValidation("RegexPhone", utils.RegexPhone)
if err := validate.Struct(userParams); err != nil {
  // 返回我们tag中的提示语
  c.JSON(-1, response.Err.WithMsg(utils.ProcessErr(userParams, err)))
  return
}

现在就是我们想要的结果了

image-20230130230149986

 
回复列表
默认   热门   正序   倒序

回复:go validator参数校验器自定义规则及提示(自定义异常返回提示语)

Powered by 7.12.10

©2015 - 2025 90Link

90link品牌推广 网站地图

您的IP:10.1.228.218,2025-12-21 18:25:01,Processed in 0.25864 second(s).

豫ICP备2023005541号

头像

用户名:

粉丝数:

签名:

资料 关注 好友 消息
免责声明
  • 1、本网站所刊载的文章,不代表本网站赞同其观点和对其真实性负责,仅供参考和借鉴。
  • 2、文章中的图片和文字版权归原作者所有,如有侵权请及时联系我们,我们将尽快处理。
  • 3、文章中提到的任何产品或服务,本网站不对其性能、质量、适用性、可靠性、安全性、法律合规性等方面做出任何保证或承诺,仅供读者参考,使用者自行承担风险。
  • 4、本网站不承担任何因使用本站提供的信息、服务或产品而产生的直接、间接、附带或衍生的损失或责任,使用者应自行承担一切风险。

侵权删除请致信 E-Mail:3454251265@qq.com