我是靠谱客的博主 冷艳鸡翅,最近开发中收集的这篇文章主要介绍gin 自定义参数验证方法及使用ShouldBindJSON方法进行参数验证时自定义输出的错误信息,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
使用gin框架开发时,需要对客户端传入的参数进行验证,但是框架自带的错误输出并不是很友好,所以需要我们自己封装,将错误信息转为对前端友好的信息输出
一、定义验证文件
我是新建一个跟main.go文件同级的
common
文件夹,在文件夹中创建validator.go
文件
#需要导入插件
go get github.com/go-playground/universal-translator
go get github.com/go-playground/locales
package common
import (
"github.com/gin-gonic/gin/binding"
"github.com/go-playground/locales/zh"
ut "github.com/go-playground/universal-translator"
"github.com/go-playground/validator/v10"
zhTranslations "github.com/go-playground/validator/v10/translations/zh"
"strings"
)
var (
uni *ut.UniversalTranslator
validate *validator.Validate
trans ut.Translator
)
//定义字段名称,此处对应的是你的结构体中binding的字段名称
var fieldName = map[string]string{
"Username": "用户名",
"Password": "用户密码",
"Avatar": "用户头像",
}
//定义自定义方法,此处对应的是你的自定义验证方法的标签名称,因为有可能插件自带的验证方法并不能完全满足我们的需要,就需要自己定义
var myTags = map[string]string{
"myvalidate": "必须通过自定义方法验证",
}
//这是一个自定义验证方法
var myvalidate validator.Func = func(fl validator.FieldLevel) bool {
val, ok := fl.Field().Interface().(string)
if ok {
if val != "gangan" {
return false
}
}
return true
}
func init() {
translator := zh.New()
uni = ut.New(translator, translator)
trans, _ = uni.GetTranslator("zh")
var (
validate *validator.Validate
ok bool
)
//注册自定义验证方法
if validate, ok = binding.Validator.Engine().(*validator.Validate); ok {
validate.RegisterValidation("myvalidate", myvalidate)
}
_ = zhTranslations.RegisterDefaultTranslations(validate, trans)
}
func Translate(err error) string {
var result string
errors := err.(validator.ValidationErrors)
for _, err := range errors {
//判断是自定义验证方法
var (
tag = err.Tag() //绑定的验证方法
field = err.Field() //绑定的验证字段
msg string
)
if val, exist := myTags[tag]; exist {
msg = field + val + ";"
} else {
msg = err.Translate(trans) + ";"
}
if val, exist := fieldName[field]; exist {
msg = strings.Replace(msg, field, val, 1)
}
result += msg
}
return result
}
二、使用
1、定义参数结构体
type (
//注册请求结构体,此处使用的自定义验证方法myvalidate
RegisterRequest struct {
Username string `json:"username" binding:"required,min=3,max=25,myvalidate"`
Password string `json:"password" binding:"required,min=6,max=25"`
Avatar string `json:"avatar" binding:"required,url"`
}
)
2、调用
var (
err error
res *RegisterRequest
)
res = new(RegisterRequest)
//进行参数验证
if err = c.ShouldBindJSON(res); err != nil {
//验证未通过,使用自定义的错误输出方法,获取错误信息
core.ResponseError(c, common.Translate(err))
return
}
结果
最后
以上就是冷艳鸡翅为你收集整理的gin 自定义参数验证方法及使用ShouldBindJSON方法进行参数验证时自定义输出的错误信息的全部内容,希望文章能够帮你解决gin 自定义参数验证方法及使用ShouldBindJSON方法进行参数验证时自定义输出的错误信息所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复