首页 > 其他分享 >validator库在gin中的使用

validator库在gin中的使用

时间:2024-05-08 17:44:21浏览次数:24  
标签:err -- 使用 validator Error gin validate com

目录

封装语言包翻译器

package validator

import (
	"fmt"
	"net/http"
	"reflect"

	"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"
)

func Validate(data interface{}) (string, int) {
	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), http.StatusUnprocessableEntity
		}
	}
	return "", 0
}

tag中设置验证规则

validate:定义验证规则
lable:自定义错误提示

// DealerUserAddress 结构体
type UserAddress struct {
	global.GVA_MODEL
	Address       string `json:"address" form:"address"  validate:"required" label:"地址" gorm:"column:address;comment:地址;size:1000;default:'';"`                    //地址
	ContactPerson string `json:"contactPerson" form:"contactPerson" validate:"required" label:"联系人" gorm:"column:contact_person;comment:联系人;size:255;default:'';"` //联系人
	Mobile        string `json:"mobile" form:"mobile"  validate:"required,min=11" label:"手机号" gorm:"column:mobile;comment:手机号;size:12;default:'';"`                //手机号
	ManuId        int    `json:"manuId" form:"manuId" gorm:"column:manu_id;comment:经销商ID;"`                                                                        //经销商ID
	Mark          string `json:"mark" form:"mark" gorm:"column:mark;comment:注意;size:1000;default:'';"`
	global.GVA_DATA_AUTH_MODEL
}

更多验证规则参考手册
https://github.com/go-playground/validator

控制层验

func (userAddressApi *UserAddressApi) CreateDealerUserAddress(c *gin.Context) {
	userToken, _, e := common.GetContextDealerUser(c)
	if e != nil {
		response.FailWithMessage("获取用户信息失败", c)
		return
	}
	var userAddressApi erp.UserAddress
	err := c.ShouldBindJSON(&userAddressApi)
	if err != nil {
		global.GVA_LOG.Error("参数解析失败!", zap.Error(err))
		response.FailWithMessage("参数解析失败", c)
		return
	}
	if msg, errCode := validator.Validate(userAddressApi); errCode != 0 {
		err := fmt.Errorf("参数验证失败!code:%d msg:%s", errCode, msg)
		global.GVA_LOG.Error(err.Error(), zap.Error(err))
		response.FailWithMessage(err.Error(), c)
		return
	}
	if err := userAddressService.CreateUserAddress(&userAddressApi, userToken); err != nil {
		global.GVA_LOG.Error("创建失败!", zap.Error(err))
		response.FailWithMessage("创建失败", c)
	} else {
		response.OkWithDetailed(userAddressApi, "创建成功", c)
	}
}

curl请求

curl --location --request POST 'http://127.0.0.1:8889/dealerClientErp/createDealerClient' \
--header 'User-Agent: Apifox/1.0.0 (https://apifox.com)' \
--header 'Content-Type: application/json' \
--header 'Accept: */*' \
--header 'Host: 127.0.0.1:8889' \
--header 'Connection: keep-alive' \
--data-raw '{
    "username": "haima1",
    "mobile": "",
    "clientType": 3,
    "mark": "this is test"
}'

返回结果

{
    "code": 7,
    "data": {},
    "msg": "参数验证失败!code:422 msg:手机号为必填字段"
}

参考文章:
https://www.liwenzhou.com/posts/Go/validator-usages/#c-1-0-2

标签:err,--,使用,validator,Error,gin,validate,com
From: https://www.cnblogs.com/haima/p/18180393

相关文章

  • NGINX配置记录
    ####NGINX配置记录server{listen80;server_namewww.222.com;charsetutf-8;#roothtml/222/wap/dist;#location/robots.txt{#301重定向#return301http://www.333.com;if($time_iso8601~"(\d{4})-(\d{2})-(\d{2})"......
  • Windows下使用ONNXRuntime推理YOLOv8
    一、准备工作将训练好的pt文件转为onnx格式。yoloexportmodel=best.ptformat=onnxdevice=0opset=13dynamic#如果是动态Shape的话,命令行参数dydynamic一定要加上,不然就是static的模型二、下载与安装ONNXRuntime注意:下载安装onnxruntime-gpu时需要保证其与cuda的兼容......
  • 【gin】【swag】
    @目录写在前面ginswagger安装依赖添加注释生成api文件路由设置访问源码分析gin-swagger参考资料基础/标准库/第三方库golang导航编程规范算法|面试项目写在前面相关博文个人博客首页免责声明:仅供学习交流使用!开源框架可能存在的风险和相关后果将完全由用户自行承担,本人不......
  • vim使用与yum命令
    vim#编辑文件,进入命令模式vim文件名称#编辑文件,进入输入模式i[a|o]#从输入模式退出到命令模式Esc#从命令模式退出,退出编辑:w保存文件。:q退出Vim编辑器。:wq保存文件并退出Vim编辑器。:q!强制退出Vim编辑器,不保存修改。yum#列出所有可更新的......
  • Nginx
    Nginx是一款开源的高性能HTTP服务器和反向代理服务器,用于处理静态内容,维护持久连接,以及提供第七层负载均衡器支持。以下是Nginx的一些主要特性:静态内容服务:Nginx可以处理静态内容,如HTML,图片,CSS,JavaScript等。反向代理:Nginx可以作为代理服务器接收客户端请求,并将请求转发......
  • PyTorch的安装与使用
    技术背景PyTorch是一个非常常用的AI框架,主要归功于其简单易用的特点,深受广大科研人员的喜爱。在前面的一篇文章中我们介绍过制作PyTorch的Singularity镜像的方法,这里我们单独抽出PyTorch的安装和使用,再简单的聊一聊。安装Torch常规的安装方案可以使用源码安装、pip安装、conda......
  • Linux系列---【使用lvm对xfs类型逻辑卷进行缩容】
    使用lvm对xfs类型逻辑卷进行缩容1.确定需要缩容的逻辑卷的类型是否是xfsdf-Th2.备份逻辑卷对应的目录原数据#/tmp/home.dump:为备份后存放的位置,/home:为需要备份的目录xfsdump-f/tmp/home.dump/home#1.输入session名:home_session#2.输入media:home_media#3.查看......
  • 使用Python的DataFrame和duckdb查询PG数据库
    直接使用以下脚本:importpsycopg2importduckdbimportpandasaspd#ConnecttoPostgreSQLconn_postgres=psycopg2.connect(dbname="pg_test_db",user="your_username",#Replacewithyourusernamepassword="your_password&qu......
  • 开源的内存虚拟硬盘软件ImDisk的使用方法和高级用法
    ImDisk是一款开源的内存虚拟硬盘软件,它允许你在Windows平台上创建并管理虚拟磁盘。以下是ImDisk的使用方法和高级用法的详解:一、使用方法详解创建一个虚拟磁盘映像文件打开ImDisk虚拟磁盘管理器。在菜单栏中选择“操作”>“创建空白映像文件”。按照提示完成创建过程。......
  • Testing Egineer note:2024_5_8-day07-part02
    设计测试用例编写技巧设计测试用例编写技巧查看用例的模板案例模板1:案例模板2:案例模板3:用例的要素讲解编写用例的要素?用例编号,用例标题,前置条件,测试步骤,预期结果,优先级(必写)系统名称、模块名称、用例创建时间,实际结果,用例类型,执行时间,执行状态等(非必填项)详......