go gin 自定义验证

我们上一篇已经提到了gin中binding时候可以指定json字段大小等限制,但是那个错误却是英文的,现在想搞成中文的,以便前端可读,demo如下

package main

import (
	"net/http"
	"reflect"

	"github.com/gin-gonic/gin"
	"github.com/go-playground/validator/v10"
)

// binding 指明了json字段的限制,msg是自定义的错误提醒
type UserInfo struct {
	UserName  string `json:"username" binding:"required,min=4,max=6" msg:"username验证失败"`
	Age       int    `json:"age" binding:"gt=18,lte=120" msg:"age验证失败"`
	Password  string `json:"password" binding:"required" msg:"密码校验失败"`
	Password2 string `json:"password2" binding:"required,eqfield=Password" msg:"必填,切要与password一致"`
}

//any是泛型

func CoustomError(err error, obj any) map[string]string {
	var errors map[string]string = make(map[string]string)
	if err2, ok := err.(validator.ValidationErrors); ok {
		// 反射
		getObj := reflect.TypeOf(obj)
		// 循环错误的验证
		for _, v := range err2 {
			if sf, exist := getObj.Elem().FieldByName(v.Field()); exist {
				// 获取结构体中的msg属性
				errors[v.Field()] = sf.Tag.Get("msg")
			}
		}
		return errors
	}
	return nil
}

func validationcustomerror(c *gin.Context) {
	var user UserInfo
	err := c.ShouldBindJSON(&user)
	if err != nil {
		errors := CoustomError(err, &user)
		c.JSON(http.StatusBadRequest, gin.H{"msg": errors})
	} else {
		c.JSON(http.StatusOK, gin.H{"msg": user})
		return
	}
}

func main() {
	router := gin.Default()
	router.POST("/validationcustomerror", validationcustomerror)
	router.Run("localhost:8888")
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/94667.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

高忆管理:美股涨、欧股涨、中概股大爆发!这一夜,市场经历了什么

当地时间周一,投资者等待本周即将公布的多项重要数据的同时,继续消化美联储年内再加息一次的预期,危险偏好有所提高,推进美国三大股指集体上涨。到收盘,道指涨0.62%,标普500指数涨0.63%,纳指涨0…

【Day-22慢就是快】代码随想录-栈与队列-前K个高频元素

给定一个非空的整数数组,返回其中出现频率前 k 高的元素。 示例 1: 输入: nums [1,1,1,2,2,3], k 2输出: [1,2] 示例 2: 输入: nums [1], k 1输出: [1] ———————————————————————————————————————— 这道题目主要涉…

浅谈视频汇聚平台EasyCVR视频平台在城市安全综合监测预警台风天气中的重要作用

夏日已至,台风和暴雨等极端天气频繁出现。在城市运行过程中,台风所带来的暴雨可能会导致城市内涝等次生灾害,引发交通瘫痪、地铁停运、管网泄漏爆管、路面塌陷、防洪排涝、燃气爆炸、供热安全、管廊安全、消防火灾等安全隐患,影响…

深度强化学习。介绍。深度 Q 网络 (DQN) 算法

马库斯布赫霍尔茨 一. 引言 深度强化学习的起源是纯粹的强化学习,其中问题通常被框定为马尔可夫决策过程(MDP)。MDP 由一组状态 S 和操作 A 组成。状态之间的转换使用转移概率 P、奖励 R 和贴现因子 gamma 执行。概率转换P(系统动…

解决maven仓库无法自动下载程序包的问题

在调试idea项目报错:未解析的依赖项:de.fhpotsdam:unfolding:jar:0.9.6 问题描述解决方法总结 问题描述 在调试idea项目时报如上所示错误,并尝试了网上所说的更改maven仓库为阿里云仓库等方法,但是maven均无法自动下载unfolding程序包。 解…

论文笔记: One Fits All:Power General Time Series Analysis by Pretrained LM

1 intro 时间序列领域预训练模型/foundation 模型的研究还不是很多 主要挑战是缺乏大量的数据来训练用于时间序列分析的基础模型——>论文利用预训练的语言模型进行通用的时间序列分析 为各种时间序列任务提供了一个统一的框架 论文还调查了为什么从语言领域预训练的Transf…

Python(Web时代)—— Django数据库整合

简介 ORM框架介绍 ORM(Object Relation Mapping)框架,可以帮助我们把类和数据表进行一个映射,让我们可以通过类和类对象来直接操作数据库中的数据。 优势:根据对接的数据库引擎翻译成对应的sql语句,所以…

恒运资本:两市迎普涨,创业板指涨超3%,汽车配件等板块走强

29日早盘,A股两市低开高走,沪指涨幅超1%,创业板指涨超3%。截至午间收盘,沪指涨1.39%报3141.82点,深成指涨2.41%,创业板指涨3.47%%,两市算计成交6265亿元。北向资金净流入超38亿元。盘面上&#…

手机云控设计思路

本系统为任务分发系统,上游发布任务或者接受其他平台系统分发的任务,对任务进行规则引擎处理后分类,由核心分发系统部分进行对存活的空闲终端进行分发任务,终端做完任务后进行反馈给任务系统. 核心要处理的点是终端存活与空闲的统计、任务平均分布下发给终端的算法,保证分布的…

基于AVR128单片机智能传送装置

一、系统方案 1、板载可变电阻(电位器)R29的电压作为处理器ATmega128的模数转换模块中单端ADC0的模拟信号输入(跳线JP13短接)。 2、调节电位器,将改变AD转换接口ADC0的模拟信号输入,由处理器完成ADC0的A/D转…

Qt:界面实时响应鼠标拖动绘制

采用双缓冲实现界面实时响应鼠标的拖动绘制。 思想如下:首先需要两张画布pix和tempPix,他们都是QPixmap实例;pix用来保存初始界面或上一阶段以完成的绘制;tempPix用来作为鼠标拖动时的实时界面绘制;当鼠标左键按下后拖…

vue 使用C-Lodop打印小票

先从官网下载js文件 https://www.lodop.net/LodopDemo.html 打开安装程序,一直下一步既可,我这边已经安装过就不演示了。 // 引入 import { getLodop } from /utils/CLodopfuncs.js;// 使用 let LODOP getLodop()let Count LODOP.GET_PRINTER_COUNT…

串行FIR滤波器

串行 FIR 滤波器设计 串行设计,就是在 16 个时钟周期内对 16 个延时数据分时依次进行乘法、加法运算,然后在时钟驱动下输出滤波值。考虑到 FIR 滤波器系数的对称性,计算一个滤波输出值的周期可以减少到 8 个。串行设计时每个周期只进行一次乘…

npm install sentry-cli失败的问题

1. 目前报错 2. 终端运行 npm set ENTRYCLI_CDNURLhttps://cdn.npm.taobao.org/dist/sentry-cli npm set sentrycli_cdnurlhttps://cdn.npm.taobao.org/dist/sentry-cli3. 再安装 npx sentry/wizardlatest -i nextjs即可成功

蓝牙模块产品认证-国际市场准入准则之加拿大IC认证基础知识

蓝牙模块产品认证-国际市场准入准则之加拿大IC认证基础知识 一:前言加拿大IC介绍 1.1:IC更名 2016年3月加拿大工业部(IC, Industry Canada)正式更名为加拿大创新、科学和经济发展 部(ISED, Innovation, Science and Economic Development Canada) ISED…

汇编-内中断

中断的意思是指, CPU不再接着(刚执行完的指令) 向下执行, 而是转去处理这个特殊信息。 8086CPU,当CPU内部有下面的情况发生的时候, 将产生相应的中断信息: (1)除法错误, 比如, 执行div指令产生的除法溢出; (2)单步执行;   (3)执行into指令; (4)执行int指令。 CPU…

双基证券:预计未来还会有更多政策来吸引增量资金

双基证券表明,8月27日,活泼资本商场五大方针出台:证券买卖印花税折半征收;阶段性收紧IPO节奏;上市房企再融资不受破发、破净和亏损限制;规范控股股东与实践操控人减持行为;融资保证金最低份额由…

homeassistant ubuntu自启动 网络设置

命令行安装virtualbox 或者安装包 hass官网下载 haos_ova-10.4.vdi virtualbox 装hass 最少2G内存 其他省略 自启动: gnome-session-properties 添加 VBoxManage startvm hass --type headless hass为自己的虚拟机名字 网络配置如下: 要全部打开

图像扭曲之锯齿

源码: void wave_sawtooth(cv::Mat& src,cv::Mat& dst,double amplitude,double wavelength) {dst.create(src.rows, src.cols, CV_8UC3);dst.setTo(0);double xAmplitude amplitude;double yAmplitude amplitude;int xWavelength wavelength;int yWave…

checkstyle检查Java编程样式:识别应该被定义为final的类

介绍 总体说明 checkstyle可以使用FinalClass检查应该被定为final的类。如果违反了,就会报违反项: https://checkstyle.sourceforge.io/checks/design/finalclass.html checkstyle规则集文件对FinalClass模块的配置: 哪些类可以被定义fi…