gin数据解析和绑定

一. Json数据解析和绑定

html文件:

<!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="/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>

代码: 

  • gin.Context中的ShouldBind方法将请求中的正文中的数据,自动按照json格式解析到结构体。
package main

import (
	"net/http"

	"github.com/gin-gonic/gin"
)

// 定义接收数据的结构体
type Login struct {
	//binding:"required"修饰字段,若接收为空值,则报错
	Account string `form:"username" json:"user" uri:"user" xml:"user" binding:"required"`
	Passwd  string `form:"password" json:"password" uri:"password" xml:"password" binding:"required"`
}

func main() {
	//创建路由
	r := gin.Default()
	//设置HTML文件所在目录
	r.LoadHTMLGlob("./*.html")
	r.GET("/", func(c *gin.Context) {
		//发送html文件内容
		c.HTML(http.StatusOK, "index.html", nil)
	})

	r.POST("/loginForm", 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.Account != "root" || json.Passwd != "admin" {
			c.JSON(http.StatusBadRequest, gin.H{
				"status": ".304",
			})
			return
		}

		c.JSON(http.StatusOK, gin.H{
			"status": "ok",
		})
	})
	r.Run()
}

演示:

二. 表单数据解析和绑定

html文件:

<!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="/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>

代码:

  • gin.Context的Bind方法默认解析并绑定form格式,根据请求头中的content-type自动推断。
package main

import (
	"net/http"

	"github.com/gin-gonic/gin"
)

// 定义接收数据的结构体
type Login struct {
	//binding:"required"修饰字段,若接收为空值,则报错
	Account string `form:"username" binding:"required"`
	Passwd  string `form:"password" binding:"required"`
}

func main() {
	//创建路由
	r := gin.Default()
	//设置HTML文件所在目录
	r.LoadHTMLGlob("./*.html")
	r.GET("/", func(c *gin.Context) {
		//发送html文件内容
		c.HTML(http.StatusOK, "index.html", nil)
	})

	r.POST("/loginForm", func(c *gin.Context) {
		//声明接收变量
		var form Login

		//Bind()默认解析并绑定form格式
		//根据请求头中的content-type自动推断
		if err := c.Bind(&form); err != nil {
			//gin.H封装了生成json数据工具
			c.JSON(http.StatusBadRequest, gin.H{
				"error": err.Error(),
			})
			return
		}
		//判断用户名密码是否正确
		if form.Account != "root" || form.Passwd != "admin" {
			c.JSON(http.StatusBadRequest, gin.H{
				"status": ".304",
			})
			return
		}

		c.JSON(http.StatusOK, gin.H{
			"status": "ok",
		})
	})
	r.Run()
}

三. URI数据解析和绑定

  • gin.Context中的ShouldBindUri方法将uri中的数据,自动按照uri格式解析到结构体。
package main

import (
	"net/http"

	"github.com/gin-gonic/gin"
)

// 定义接收数据的结构体
type Login struct {
	//binding:"required"修饰字段,若接收为空值,则报错
	Account string `uri:"user" binding:"required"`
	Passwd  string `uri:"password" binding:"required"`
}

func main() {
	//创建路由
	r := gin.Default()

	r.GET("/:user/:password", func(c *gin.Context) {
		//声明接收变量
		var uri Login

		if err := c.ShouldBindUri(&uri); err != nil {
			//gin.H封装了生成json数据工具
			c.JSON(http.StatusBadRequest, gin.H{
				"error": err.Error(),
			})
			return
		}
		//判断用户名密码是否正确
		if uri.Account != "root" || uri.Passwd != "admin" {
			c.JSON(http.StatusBadRequest, gin.H{
				"status": ".304",
			})
			return
		}

		c.JSON(http.StatusOK, gin.H{
			"status": "ok",
		})
	})
	r.Run()
}

演示:

 

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

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

相关文章

Java数据脱敏

数据脱敏 敏感数据在存储过程中为是否为明文, 分为两种 落地脱敏: 存储的都是明文, 返回之前做脱敏处理不落地脱敏: 存储前就脱敏, 使用时解密, 即用户数据进入系统, 脱敏存储到数据库中, 查询时反向解密 落地脱敏 这里指的是数据库中存储的是明文数据, 返回给前端的时候脱…

带货直播部门的薪酬提成还有绩效考核怎么做!

直播带货公司一大片&#xff0c;老板一定要控制好自己利润很好的时候分钱的这个欲望&#xff0c;因为不怕分钱&#xff0c;就怕分错了之后收不回来。举例&#xff1a;你今年赚了 1, 000 万&#xff0c;然后你的运营或者你的投手是不是你感觉他的贡献很大&#xff0c;这时候你就…

时延降低 50%,小红书图数据库如何实现多跳查询性能大幅提升

多跳查询为企业提供了深入的数据洞察和分析能力&#xff0c;它在小红书众多在线业务中扮演重要的角色。然而&#xff0c;这类查询往往很难满足稳定的 P99 时延要求。小红书基础架构存储团队针对这一挑战&#xff0c;基于大规模并行处理&#xff08;MPP&#xff09;的理念&#…

【已解决】Pycharm:卡顿解决方案汇总

可能原因&#xff1a; 1、内存少 2、加载慢 3、文件多 4、硬件老 解决方案&#xff1a; 本机测试在 MAC&#xff0c;Windows、Linux也有相应的设置&#xff0c;请自行查询。 一、调整Pycharm使用内存 Help - Change Memory Settings 二、取消勾选 重复打开上次项目 Pych…

什么是Arkose Labs挑战及其解决方法

Arkose Labs挑战是一种复杂的机制&#xff0c;旨在验证用户是真正的人类&#xff0c;而不是自动化的机器人或脚本。这一挑战在维护在线服务的安全性和完整性方面发挥着关键作用&#xff0c;通过防止欺诈活动并确保只有真实用户才能访问某些功能。 目录 什么是Arkose Labs挑战&a…

地理空间数据格式GeoJSON扫盲,在CesiumJS中如何加载。

Hi&#xff0c;我是贝格前端工场&#xff0c;GIS已经越来越多的应用在可视化大屏中了&#xff0c;开发GIS类应用就少不了地理空间数据&#xff0c;本文介绍一下数据GeoJSON数据格式。 一、什么是GeoJSON数据格式&#xff0c;在GIS开发中有什么作用 GeoJSON是一种基于JSON&…

T100M2S2 M.2高清2路SDI采集卡

产品简介&#xff1a; 同三维T100M2S2一款支持全高清1080P 60HZ高清M2型两路SDI采集卡&#xff0c;板卡采用了高速的M.2-PCI-E接口&#xff0c;可实现1080P全实时不丢帧60帧传输。支持高清SDI输入&#xff0c;满足各种用户的需求&#xff0c;其最高分辨率可以实现1920&time…

文生视频模型Sora刷屏的背后的数据支持

前言&#xff1a;近日&#xff0c;OpenAI的首个文生视频模型Sora横空出世&#xff0c;引发了一波Sora热潮。与其相关的概念股连续多日涨停&#xff0c;多家媒体持续跟踪报道&#xff0c;央视也针对Sora进行了报道&#xff0c;称这是第一个真正意义上的视频生成大模型。 01 …

Java医院绩效考核系统源码:考核目标、考核指标、考核方法、考核结果与奖惩措施

Java医院绩效考核系统源码&#xff1a;考核目标、考核指标、考核方法、考核结果与奖惩措施 随着我国医疗体制的改革广大人民群的看病难&#xff0c;看病贵的问题一直没有得到有效地解决医疗费用的上涨&#xff0c;远远大于大多数家庭收入的增长速度。医院的改革已经势在必行&am…

早餐店小程序开发

在快节奏的城市生活中&#xff0c;早餐对于许多人来说是一天中最重要的一餐。然而&#xff0c;传统的早餐店在经营过程中常常面临客流量不稳定、服务效率低下等问题。为了解决这些问题&#xff0c;越来越多的早餐店老板开始寻求利用科技手段提升经营效率。早餐店小程序作为一种…

项目验收测试有必要找第三方软件测试机构吗?

在当今信息技术飞速发展的时代&#xff0c;软件测试成为了确保软件质量的重要环节。而在项目的验收测试中&#xff0c;很多企业都面临一个问题&#xff0c;那就是是否有必要找第三方软件测试机构进行验收测试?今天&#xff0c;我们就来探讨一下这个问题。 第三方软件测试机构…

python中的nan是什么意思

NaN&#xff08;not a number&#xff09;&#xff0c;在数学表示上表示一个无法表示的数&#xff0c;这里一般还会有另一个表述inf&#xff0c;inf和nan的不同在于&#xff0c;inf是一个超过浮点表示范围的浮点数&#xff08;其本质仍然是一个数&#xff0c;只是他无穷大&…

如何制作自己的网站

制作自己的网站可以帮助个人或组织在互联网上展示自己的品牌、作品、产品或服务。随着技术的发展&#xff0c;现在制作网站变得越来越简单。下面是一个简单的步骤指南&#xff0c;帮助你制作自己的网站。 1. 确定你的网站需求和目标 在开始之前&#xff0c;你需要明确你的网站的…

左右旋分辨

从端头看&#xff0c;切削路径顺时针是右旋&#xff0c;反时针左旋。

【JVM-1】JVM内存结构

目录 什么是JVMJava源码执行机制class文件的组成部分 JVM跨平台原理JVM的组成堆年轻代与老年代对象分配过程GC类型Full GC触发条件&#xff1a;对象进入老年代的触发条件 对象分配过程&#xff1a; 字符串常量池静态变量线程本地分配缓冲区&#xff08;TLAB&#xff09;TLAB相关…

SpringBoot前后端传递数据时常用的JSON格式数据是什么?【讲解JSON概念、语法、以及Java对象互转】

SpringBoot前后端传递数据时常用的JSON格式数据是什么&#xff1f; JSON概念JSON语法JSON的两种结构&#xff1a;JSON字符串和Java对象互转&#xff1a;objectMapper.writeValueAsString(person);objectMapper.readValue(jsonStr,Person.class); 在SpringMVC框架中&#xff0c;…

【GitOps】使用Google工具JIB实现本地无需安装容器推送镜像,加速SpringCloud项目开发

文章目录 一、效果展示二、简介三、安装Jib插件1、区分环境2、安装插件一、效果展示 本地是window系统,无docker环境,没有任何runtime,使用jib工具打包镜像并推送完成,用时20秒 二、简介 Jib 是 Google 开发的一款开源工具,旨在帮助 Java 开发者更高效地将 Java 应用程…

ZNB40 矢量网络分析仪

ZNB40 矢量网络分析仪 100kHz至40GHz的宽频率范围&#xff0c;具有四个端口和附加信号发生器 概述 R&SZNB40 提供 100 kHz 至 40 GHz 的宽频率范围&#xff0c;具有四个端口和附加信号发生器。 罗德与施瓦茨带四个端口和附加内部信号源的 40 GHz 中档矢量网络分析仪&…

Ubuntu20.04安装python2和python3及版本配置

Ubuntu20.04安装python2和python3及版本配置_ubuntu 20.04 python3-CSDN博客https://blog.csdn.net/pangc2014/article/details/117407413 >>>ubuntu 安装源码python2_mob649e8161c39d的技术博客_51CTO博客https://blog.51cto.com/u_16175489/7327966

【Academy】测试WebSockets安全漏洞Testing for WebSockets security vulnerabilities

测试WebSockets安全漏洞Testing for WebSockets security vulnerabilities 概述WebSockets是什么?HTTP和WebSockets有什么区别&#xff1f;如何建立WebSocket连接&#xff1f;WebSocket消息看起来像什么&#xff1f; 操纵WebSocket流量拦截和修改WebSocket消息重放和生成新的W…