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

gin数据解析和绑定

  • go代码
package main
import ("net/http""github.com/gin-gonic/gin"
)
// 定义接收JSON数据的结构体
type Login struct {Username string `form:"username" json:"username" uri:"username" xml:"username" binding:"required"`Password string `form:"password" json:"password" uri:"password" xml:"password" binding:"required"`
}
func f1(c *gin.Context){var json Login// 将数据解析到结构体中if err := c.ShouldBindJSON(&json); err != nil {// 返回错误信息c.JSON(http.StatusBadRequest, gin.H{"error": err.Error(),})return}c.JSON(http.StatusOK, gin.H{"Username": json.Username,"Password": json.Password,})
}
func main() {r := gin.Default()v1 := r.Group("/v1"){v1.POST("/loginjson", f1)}r.Run("192.168.0.10:8001")
}
  • curl 测试
curl -X POST \
-H 'Content-type:application/json' \
-d '{"username":"zhangsan","password": "qwerty"}' \
http://192.168.0.10:8001/v1/loginjson
  • python - requests测试
import json
import requests
data_json = {"username": "zhangsan","password": "123456",
}
url = "http://192.168.0.10:8001/v1/loginjson"
resp = requests.post(url, data = json.dumps(data_json))
print(resp.text)

表单数据解析与绑定

  • go代码
func f2(c *gin.Context){var form Login// 将数据解析到结构体中if err := c.Bind(&form); err != nil {// 返回错误信息c.JSON(http.StatusBadRequest, gin.H{"error": err.Error(),})return}c.JSON(http.StatusOK, gin.H{"Username": form.Username,"Password": form.Password,})
}
v1.POST("loginform", f2)
  • python - requests测试
import requests
data = {"username": "zhangsan","password": "123456",
}
url = "http://192.168.0.10:8001/v1/loginform"
resp = requests.post(url, data = data)
print(resp.text)
  • curl测试
curl -d "username=zhangsan&password=qwerty" \
http://192.168.0.10:8001/v1/loginform

URI数据解析与绑定

  • go代码
func f3(c *gin.Context){// uri数据解析与绑定var uri Login// 将数据解析到结构体中if err := c.ShouldBindUri(&uri); err != nil {// 返回错误信息c.JSON(http.StatusBadRequest, gin.H{"error": err.Error(),})return}c.JSON(http.StatusOK, gin.H{"Username": uri.Username,"Password": uri.Password,})
}
v1.GET("/loginuri/:username/:password", f3)
  • curl 测试
curl 'http://192.168.0.10:8001/v1/loginuri/zhangsan/asdfgh'

XML数据解析与绑定

  • go代码
func f4(c *gin.Context){// xml数据解析与绑定var xml Login// 将数据解析到结构体中if err := c.ShouldBindXML(&xml); err != nil {// 返回错误信息c.JSON(http.StatusBadRequest, gin.H{"error": err.Error(),})return}c.JSON(http.StatusOK, gin.H{"Username": xml.Username,"Password": xml.Password,})
}
v1.POST("/loginxml", f4)
  • python - requests 测试
import requests
data_xml = """
<?xml version="1.0" encoding="utf-8"?>
<server>
<username>lisi</username>
<password>123456</password>
</server>
"""
url = "http://192.168.0.10:8001/v1/loginxml"
resp = requests.post(url, data = data_xml)
print(resp.text)

附录 - 完整go示例代码

package main
import ("net/http""github.com/gin-gonic/gin"
)
// 定义接收JSON数据的结构体
type Login struct {Username string `form:"username" json:"username" uri:"username" xml:"username" binding:"required"`Password string `form:"password" json:"password" uri:"password" xml:"password" binding:"required"`
}
func f1(c *gin.Context){// JSON数据解析与绑定var json Login// 将数据解析到结构体中if err := c.ShouldBindJSON(&json); err != nil {// 返回错误信息c.JSON(http.StatusBadRequest, gin.H{"error": err.Error(),})return}c.JSON(http.StatusOK, gin.H{"Username": json.Username,"Password": json.Password,})
}
func f2(c *gin.Context){// 表单数据解析与绑定var form Login// 将数据解析到结构体中if err := c.Bind(&form); err != nil {// 返回错误信息c.JSON(http.StatusBadRequest, gin.H{"error": err.Error(),})return}c.JSON(http.StatusOK, gin.H{"Username": form.Username,"Password": form.Password,})
}
func f3(c *gin.Context){// uri数据解析与绑定var uri Login// 将数据解析到结构体中if err := c.ShouldBindUri(&uri); err != nil {// 返回错误信息c.JSON(http.StatusBadRequest, gin.H{"error": err.Error(),})return}c.JSON(http.StatusOK, gin.H{"Username": uri.Username,"Password": uri.Password,})
}
func f4(c *gin.Context){// xml数据解析与绑定var xml Login// 将数据解析到结构体中if err := c.ShouldBindXML(&xml); err != nil {// 返回错误信息c.JSON(http.StatusBadRequest, gin.H{"error": err.Error(),})return}c.JSON(http.StatusOK, gin.H{"Username": xml.Username,"Password": xml.Password,})
}
func main() {r := gin.Default()v1 := r.Group("/v1"){v1.POST("/loginjson", f1)v1.POST("/loginform", f2)v1.GET("/loginuri/:username/:password", f3)v1.POST("/loginxml", f4)}r.Run("192.168.0.10:8001")
}
http://www.xdnf.cn/news/15855.html

相关文章:

  • 门控线性单元GLU (Gated Linear Unit)
  • Go语言流程控制(if / for)
  • 一小时学习Redis
  • websocket案例 599足球比分
  • 海森矩阵(Hessian Matrix)在SLAM图优化和点云配准中的应用介绍
  • 实战指南|智慧无人机安防系统搭建全流程解析
  • 深入理解Linux文件操作:stdin/stdout/stderr与C语言文件函数全解析
  • PDF 拆分合并PDFSam:开源免费 多文件合并 + 按页码拆分 本地处理
  • 突破性量子芯片问世:电子与光子首次集成,开启量子技术规模化应用新篇章
  • 暑期自学嵌入式——Day05补充(C语言阶段)
  • 二分答案之第 K 小/大
  • Visual Studio编译WPF项目生成的文件介绍
  • 服务器mysql数据的简单备份脚本
  • 二、Dify 版本升级教程(LInux-openeuler)
  • iOS OC 图片压缩
  • vue2 面试题及详细答案150道(101 - 120)
  • 国产替代:ASP4644在电信通信设备中的测试与应用前景
  • Java类:BigDecimal 的用法:乘法
  • IDEA 2020.1版本起下载JDK
  • Logback 配置的利器:深入理解<property>与<variable>
  • vue2 面试题及详细答案150道(21 - 40)
  • 闭包的定义和应用场景
  • Rust实战:高效对接Postman API
  • Spring中的SpEL是什么
  • Springboot3整合Elasticsearch8(elasticsearch-java)
  • [2025CVPR-目标检测方向]FSHNet:一种用于3D物体检测的全稀疏混合网络。
  • Hive数据仓库工具
  • 什么是高光谱相机,它与数码相机有什么区别?
  • 相机光学(五十)——Depth AF
  • RTKLIB读取星历文件,观测数据