当前位置: 首页 > news >正文

gin数据解析和绑定

1. Json 数据解析和绑定

  • 客户端传参,后端接收并解析到结构体
package mainimport ("github.com/gin-gonic/gin""net/http"
)// 定义接收数据的结构体
type Login struct {// binding:"required"修饰的字段,若接收为空值,则报错,是必须字段User    string `form:"username" json:"user" uri:"user" xml:"user" binding:"required"`Pssword string `form:"password" json:"password" uri:"password" xml:"password" binding:"required"`
}func main() {// 1.创建路由// 默认使用了2个中间件Logger(), Recovery()r := gin.Default()// JSON绑定r.POST("loginJSON", func(c *gin.Context) {// 声明接收的变量var json Login// 将request的body中的数据,自动按照json格式解析到结构体if err := c.ShouldBindJSON(&json); err != nil {// 返回错误信息// gin.H封装了生成json数据的工具c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})return}// 判断用户名密码是否正确if json.User != "root" || json.Pssword != "admin" {c.JSON(http.StatusBadRequest, gin.H{"status": "304"})return}c.JSON(http.StatusOK, gin.H{"status": "200"})})r.Run(":8000")
}

2. 表单数据解析和绑定

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title>
</head>
<body><form action="http://localhost:8000/loginForm" method="post" enctype="application/x-www-form-urlencoded">用户名<input type="text" name="username"><br>密码<input type="password" name="password"><input type="submit" value="提交"></form>
</body>
</html>
package mainimport ("net/http""github.com/gin-gonic/gin"
)// 定义接收数据的结构体
type Login struct {// binding:"required"修饰的字段,若接收为空值,则报错,是必须字段User    string `form:"username" json:"user" uri:"user" xml:"user" binding:"required"`Pssword string `form:"password" json:"password" uri:"password" xml:"password" binding:"required"`
}func main() {// 1.创建路由// 默认使用了2个中间件Logger(), Recovery()r := gin.Default()// JSON绑定r.POST("/loginForm", func(c *gin.Context) {// 声明接收的变量var form Login// Bind()默认解析并绑定form格式// 根据请求头中content-type自动推断if err := c.Bind(&form); err != nil {c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})return}// 判断用户名密码是否正确if form.User != "root" || form.Pssword != "admin" {c.JSON(http.StatusBadRequest, gin.H{"status": "304"})return}c.JSON(http.StatusOK, gin.H{"status": "200"})})r.Run(":8000")
}

3. URI数据解析和绑定

package mainimport ("net/http""github.com/gin-gonic/gin"
)// 定义接收数据的结构体
type Login struct {// binding:"required"修饰的字段,若接收为空值,则报错,是必须字段User    string `form:"username" json:"user" uri:"user" xml:"user" binding:"required"`Pssword string `form:"password" json:"password" uri:"password" xml:"password" binding:"required"`
}func main() {// 1.创建路由// 默认使用了2个中间件Logger(), Recovery()r := gin.Default()// JSON绑定r.GET("/:user/:password", func(c *gin.Context) {// 声明接收的变量var login Login// Bind()默认解析并绑定form格式// 根据请求头中content-type自动推断if err := c.ShouldBindUri(&login); err != nil {c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})return}// 判断用户名密码是否正确if login.User != "root" || login.Pssword != "admin" {c.JSON(http.StatusBadRequest, gin.H{"status": "304"})return}c.JSON(http.StatusOK, gin.H{"status": "200"})})r.Run(":8000")
}

 

 

相关文章:

  • 【牛客】几何糕手、国际裁判带师、数位dp?、灵异背包、矩阵快速幂签到、第一次放学
  • 化妆-护肤品选购
  • SASS简介及使用方法
  • 《统计学习方法:李航》笔记 从原理到实现(基于python)-- 第1章 统计学习方法概论
  • 接口自动化测试框架开发(pytest+allure+aiohttp+ 用例自动生成)
  • 惬意上手Python —— 装饰器和内置函数
  • 网络请求 mvp mvvm get post delete put 请求
  • php基础学习之常量
  • Android14源码剖析:MediaPlayer与MediaPlayerService区别?(五十四)
  • [设计模式Java实现附plantuml源码~创建型] 对象的克隆~原型模式
  • 远程ssh 不通的原因之一
  • OpenAI/ChatGPT Plus 支持的虚拟卡有哪些
  • UI自动化测试之Jenkins配置
  • LeetCode 46. 全排列
  • 2023年春秋杯网络安全联赛冬季赛 Writeup
  • 【RocksDB】TransactionDB源码分析
  • 2017-08-04 前端日报
  • Android Volley源码解析
  • CSS 提示工具(Tooltip)
  • in typeof instanceof ===这些运算符有什么作用
  • Java的Interrupt与线程中断
  • Phpstorm怎样批量删除空行?
  • spring boot 整合mybatis 无法输出sql的问题
  • vue.js框架原理浅析
  • 大型网站性能监测、分析与优化常见问题QA
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 微信小程序填坑清单
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 栈实现走出迷宫(C++)
  • 【干货分享】dos命令大全
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • #13 yum、编译安装与sed命令的使用
  • #define与typedef区别
  • #QT项目实战(天气预报)
  • (16)Reactor的测试——响应式Spring的道法术器
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (C语言)fgets与fputs函数详解
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (循环依赖问题)学习spring的第九天
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转)大道至简,职场上做人做事做管理
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • (状压dp)uva 10817 Headmaster's Headache
  • ../depcomp: line 571: exec: g++: not found
  • .Net 6.0 处理跨域的方式
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • /usr/bin/perl:bad interpreter:No such file or directory 的解决办法
  • [2017][note]基于空间交叉相位调制的两个连续波在few layer铋Bi中的全光switch——
  • [Asp.net MVC]Bundle合并,压缩js、css文件
  • [C#]C# winform部署yolov8目标检测的openvino模型
  • [ERROR] 不再支持目标选项 5。请使用 7 或更高版本
  • [HeMIM]Cl,[AeMIM]Br,[CeEIM]Cl,([HO-PECH-MIM]Cl,[HOOC-PECH-MIM]Cl改性酚醛树脂
  • [hive] posexplode函数