gofly接口入参验证使用介绍

接口传入的参数做相关性质验证是开发中较为常用,gofly框架内置校验工具,提供开发效率,开发接口简单调用即可实现验证,下面介绍gofly框架数据验证设计思路及使用方法。

gofly框架提供了功能强大、使用便捷、灵活易扩展的数据/表单校验组件,由gvalid组件实现。gvalid组件实现了非常强大的数据校验功能,内置了数十种常用的校验规则,支持单数据多规则校验、多数据多规则批量校验、自定义错误信息、自定义正则校验、自定义校验规则注册、支持struct tag规则及提示信息绑定等等特性,是目前功能最强大的Go数据校验模块。

如果想增加或修改验证规则utils/tools/gvalid/internal目录下添加会修改。验证提示多语言数据在resource\locale目录下,例如中文(zh-CN)、英文(en-US)。多语言我们采用前后端同步方式,由前端决定语种,根据前端当前语言在请求时向接口提交当前设置语言参数,这样后端就可以和前端保持同一语言,前后端提示语言同步设置如下图前端:

1.检验规则示例:

Data()传入检验数据,Locale()传入检验提示语言。

//验证规则type BizReq struct {Account   string `v:"bail|required|length:6,16|same:QQ"`QQ        stringPassword  string `v:"required|same:Password2"`Password2 string `v:"required"`}var (req = BizReq{Account:   "gf",QQ:        "123456",Password:  "Gofly23",Password2: "gofly23",})if err := gf.Validator().Data(req).Locale("en-US").Run(c); err != nil {fmt.Println("英文", err)}if err := gf.Validator().Data(req).Locale("zh-CN").Run(c); err != nil {fmt.Println("中文", err)}

 2.接口中对前端传入参数验证并数据入库操作示例:

示例中是对的account验证为(1)必传,(2)长度为6到16之间,(3)传入值的qq参数值一样。password和password2必传并且两个值一致。

// 测试入参验证
func (api *Index) SaveVeriApi(c *gf.GinCtx) {//获取传参param, _ := gf.RequestParam(c)//验证规则rules := map[string]string{"account":   "bail|required|length:6,16|same:qq","password":  "required|same:password2","password2": "required",}if err := gf.Validator().Rules(rules).Data(param).Locale(c.Request.Header.Get("locale")).Run(c); err != nil {gf.Failed().SetMsg(err.String()).Regin(c)return}res, err := gf.Model("user").Data(param).Save()if err != nil {gf.Failed().SetMsg("错误").SetData(err).Regin(c)} else {gf.Success().SetMsg("添加成功").SetData(res).SetExdata(param).Regin(c)}
}
2.1传入参数:
{account:gf,qq:123456,password:Gofly23,password2:gofly23,locale:cn,
}
2.2返回提示:
{"code": 1,"data": false,"exdata": null,"message": "password字段值`Gofly23`必须和password2字段值`gofly23`相同; account字段值`gf`字段长度应当为6到16个字符","time": 1708557872337,"token": ""
}

方法中校验规则:校验规则使用文档 了解更多。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

闰年导致的哪些 Bug

每次闰年对程序员们都是一个挑战,平时运行好好的系统,在 02-29 这一天,好像就会有各种毛病。 虽然,提前一天,领导们都会提前给下面打招呼。但是,不可避免的,今天公司因为闰年还是有一些小故障。…

Linux conntrack和iptables技术解析

Linux虚拟文件系统管理技术 1. netfilter解析1.1 netfilter的基础原理1.2 netfilter的相关hook 2. conntrack解析2.1 conntrack的基础原理2.2 conntrack的表记录解析 3. iptables解析3.1 iptables基础原理3.2 融合conntrack表的iptables规则 4. 疑问和思考4.1 conntrack和iptab…

医学知识和医疗应用开发交叉领域中垂类大语言模型应用相关研究

前言: 基于公司对LLM落地的期望,此proposal尚未研究完毕,只是简单做了一些消息整合和建议。 关于知识细节详见末尾Refs 背景: 随着LLM(大语言模型)的爆火,不少企业都在寻找通过LLM解决企业业…

揭秘:小红书笔记详情API如何助力电商提升营销效果

小红书是一个流行的社交电商平台,用户可以在上面分享购物心得、晒单、评论商品等。对于电商来说,了解小红书用户的行为和喜好,以及他们的购物决策过程,是提升营销效果的关键。小红书提供了笔记详情API,使得电商能够获取…

【学习笔记】java项目:黑马头条(day01)

文章目录 环境搭建、SpringCloud微服务(注册发现、服务调用、网关)1)课程对比2)项目概述2.1)能让你收获什么2.2)项目课程大纲2.3)项目概述2.4)项目术语2.5)业务说明 3)技术栈4)nacos环境搭建4.1)虚拟机镜像准备4.2)nacos安装 5)初始工程搭建5.1)环境准备5.2)主体结构 6)登录6.1…

Linux网络隧道协议IPIP认知(基于Linux network namespace 的 IPIP 隧道通信)

写在前面 博文内容为 Linux 隧道通信 IPIP认知内容涉及:ipip 介绍,一个 ipip 通信 Demo 以及数据帧流转分析理解不足小伙伴帮忙指正 某些人和事,哪怕没有缘分,是路边的风景,可是只要看一眼,依然会让人觉得…

高转化利器】Xinstall实现H5唤醒App,打开指定页面,轻松满足营销需求!

在移动互联网时代,App的拉新促活对于企业的发展至关重要。为了提升用户体验和转化率,Xinstall推出了一项强大的功能——H5唤醒App。通过这一功能,用户可以直接从Web页面拉起App,并在拉起过程中通过传参打开指定页面,满…

(自用笔记)每天一点vue3——第一天setup/defineProps

<script setup></script> setup语法糖&#xff0c;script中的所有内容相当于是在一个setup函数中执行的。并且声明的所有变量、引用的方法\组件&#xff08;组件名最好用大驼峰&#xff09;都能直接在模板字符串中使用。不再用data\method之类的方法包裹。setup引入…

QT在scrollArea中添加按钮,可滚动

添加按钮可滚动&#xff0c;同时设置按钮大小&#xff0c;代码如下 ui->setupUi(this); //在UI里面已经拖了一个scrollAreamyWidget new QWidget(this); //新建一个QWidget放在scrollArea中QVBoxLayout *layout new QVBoxLayout(…

webstorm 快捷代码块生成

rcc tab键 - - 用ES6模块系统创建一个React组件类 rccp tab键 - - 创建一个带有PropTypes和ES6模块系统的React组件类 rcfc tab键 - - 创建一个带有PropTypes和所有生命周期方法以及ES6模块系统的React组件类 rcjc tab键 - - 用ES6模块系统创建一个React组件类&#xff…

手工将一个 llvm IR 汇编代码解析成为 bitcode 文件

1&#xff0c;原始c语言文件 sum.c int sum(int a, int b) {return ab; } 2&#xff0c;编译成为 LLVM-IR 汇编语言 clang sum.c -emit-llvm -S -c -o sum.ll 3&#xff0c;手工把 llvm IR 汇编语言解析成 bitcode 3.1&#xff0c;源码 gen_llvm_ir.cpp #include <ll…

Sora:AI视频模型的无限可能与挑战

随着人工智能技术的突飞猛进&#xff0c;AI视频模型已成为科技领域的新焦点。OpenAI推出的AI视频模型Sora&#xff0c;凭借其卓越的技术性能和前瞻性&#xff0c;为AI视频领域的发展揭开了新的篇章。本文将从技术解析、应用场景、未来展望、伦理与创意以及用户体验与互动五个方…

iOS小技能:苹果书签打包教程【WebClip描述文件(WebClip Configuration Profile)】

文章目录 引言I WebClip描述文件1.1 属性说明1.2 利用Apple Configurator 2生成描述文件II 部署方式和签名2.1 对 .mobileconfig 文件进行签名2.2 部署方式引言 WebClip描述文件(WebClip Configuration Profile)是一种用于iOS设备的简易配置文件,它可以在你的iOS设备(如iP…

Xilinx高级调试方法--远程调试

Xilinx高级调试方法--远程调试 1 虚拟电缆调试2 FPGA设计2.1 扩展配置接口 3 PCIe-XVC驱动3.1 PCIe-XVC驱动3.2 XVC-Server 4 Vivado Design Suite4.1 同一台主机4.2 不同主机 本文主要介绍Xilinx的一些高级调试方法&#xff0c;以及如何使用Xilinx的相关IP。 1 虚拟电缆调试 …

数据结构(二)——线性表

二、线性表 2.1线性表的定义和基本操作 2.1.1 线性表的基本概念 线性表&#xff1a;是具有相同数据类型的 n 个数据元素的有限序列。(Eg:所有的整数按递增次序排列&#xff0c;不是顺序表&#xff0c;因为所有的整数是无限的)其中n为表长&#xff0c;当n0时线性表是一个空表…

DBSCAN的简要介绍和示例代码(对一维数据进行聚类)

一、简要介绍 DBSCAN&#xff08;Density-Based Spatial Clustering of Applications with Noise&#xff09;是一种常用的密度聚类算法&#xff0c;适用于发现任意形状的聚类簇&#xff0c;并且可以有效处理噪声数据。以下是关于DBSCAN的简要介绍&#xff1a; 密度概念&#…

AI领域再出“王炸“----Claude3是否会成为下一个“神“

目录 一.Claude3最新发布 二.Claude3支持20万token 三.Claude3在未公开算法上取得重大突破 1.Claude 3读懂博士论文 2.量子跃迁集成&#xff1a; Claude 3智商&#xff1a;101 测试方法 测试细节 通过Karpathy挑战 Claude 3自画像&#xff0c;突破本我 从洛杉矶排到…

UR机器人装箱姿态

1.官网手册上并没有给出该打包位姿 2.一般厂家发回来的机器人都会有这个打包程序 可以运行这个程序&#xff0c;如果有的话。 3.打包点位 如果没有这个这个&#xff0c;也可以直接按下面点位来&#xff0c;都是差不多的点位&#xff0c;可以放到包装箱中的 这个是UR10的 这个…

Vulnhub靶机:Billu_b0x

一、介绍 运行环境&#xff1a;Virtualbox 攻击机&#xff1a;kali&#xff08;192.168.56.101&#xff09; 靶机&#xff1a;Billu_b0x&#xff08;192.168.56.107&#xff09; 目标&#xff1a;获取靶机root权限和flag 靶机下载地址&#xff1a;https://download.vulnhu…

智慧城市中的数据力量:大数据与AI的应用

目录 一、引言 二、大数据与AI技术的融合 三、大数据与AI在智慧城市中的应用 1、智慧交通 2、智慧环保 3、智慧公共安全 4、智慧公共服务 四、大数据与AI在智慧城市中的价值 1、提高城市管理的效率和水平 2、优化城市资源的配置和利用 3、提升市民的生活质量和幸福感…