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

您所在的位置:网站首页 蓝道出行注册提示信息检验失败 go validator参数校验器自定义规则及提示(自定义异常返回提示语)

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

2023-08-23 14:22| 来源: 网络整理| 查看: 265

原文连接: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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3