gin框架 数据验证validator 并输出中文报错信息

文章介绍了在GinWeb框架中如何使用Validator进行参数验证,包括如何处理多个错误、将英文错误信息翻译成中文以及将字段名称映射为中文。通过引入特定的Go库,如`github.com/go-playground/validator`,并注册翻译器,可以实现自定义的验证方法,以便在验证失败时返回中文错误信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、使用validator根据需求需要稍做调整

1.需要说明的是,gin框架有自己的验证包,我们也可以用第三方的验证包,不过都差不多,在我们进行项目开发中,有如下几个问题:

        1)、同时返回多个字段的错误,可通过遍历错误信息,只返回一条

        2)、返回的错误信息为英文的,要转译成中文

        3)、对应错误信息的字段名称为英文,需要转为中文

二、需要下载的包

	"github.com/go-playground/locales/zh_Hans_CN"
	unTrans "github.com/go-playground/universal-translator"
	"github.com/go-playground/validator/v10"
	zhTrans "github.com/go-playground/validator/v10/translations/zh"

如上的包,通过 go get 获取

三、封装验证方法

package validator

import (
	"fmt"
	"github.com/go-playground/locales/zh_Hans_CN"
	unTrans "github.com/go-playground/universal-translator"
	"github.com/go-playground/validator/v10"
	zhTrans "github.com/go-playground/validator/v10/translations/zh"
	"reflect"
)

func Validate(data interface{}) (string,int) {
	//验证对象 并将英文报错转换成中文报错(message)
	validate := validator.New()
	uni := unTrans.New(zh_Hans_CN.New())
	trans,_ := uni.GetTranslator("zh_Hans_CN")
	err := zhTrans.RegisterDefaultTranslations(validate,trans)
	if err != nil {
		fmt.Println("err:",err)
	}
	//将验证法字段名 映射为中文名
	validate.RegisterTagNameFunc(func(field reflect.StructField) string {
		label := field.Tag.Get("label")
		return label
	})
	err = validate.Struct(data)
	if err != nil {
		//错误可能有多个 遍历 返回一个
		for _,v := range err.(validator.ValidationErrors) {
			return v.Translate(trans),500
		}
	}
	return "",200
}

四、使用验证

json : json转换字段名

validate:验证规则

label:字段名对应的 中文名

// 表单数据 需要tag参数

type User struct {
	UserName string `json:"username" validate:"required,min=4,max=12" label:"用户名"`
	PassWord string `json:"password" validate:"required,min=6,max=20" label:"密码"`
}

控制器中使用validator

func AddUser(c *gin.Context) {

	var data models.User

    //接收请求参数
	_ = c.ShouldBindJSON(&data) 

    //验证数据并返回结果
	msg,code := validator.Validate(&data)
    
    //验证报错,返回错误信息给前端
	if code != 200 {
		c.JSON(http.StatusOK,gin.H{
			"status":code,
			"message":msg,
		})
		return
	}

}

测试请求结果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值