我是靠谱客的博主 冷艳鸡翅,最近开发中收集的这篇文章主要介绍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方法进行参数验证时自定义输出的错误信息所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部