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

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.dtcms.com/a/285516.html

相关文章:

  • CentOS 7 配置环境变量常见的4种方式
  • 【Python】DRF核心组件详解:Mixin与Generic视图
  • (5)颜色的灰度,亮度,对比度,透明度,都啥意思
  • IDEA 2024.1 配置 MyBatis Generator 详细教程
  • PostgreSQL技术大讲堂 - 第97讲:PG数据库编码和区域(locale)答疑解惑
  • SQLite / LiteDB 单文件数据库为何“清空表后仍占几 GB”?——原理解析与空间回收实战
  • 基于单片机智能浇花控制系统设计
  • 短视频矩阵系统:选择与开发的全面指南
  • Instagram千号矩阵:亚矩阵云手机破解设备指纹检测的终极方案
  • Hadoop与云原生集成:弹性扩缩容与OSS存储分离架构深度解析
  • ThreadLocal 在 Spring 与数据库交互中的应用笔记
  • 车载监控录像系统:智能安全驾驶的守护者
  • SGLang 推理框架核心组件解析:请求、内存与缓存的协同工作
  • Android音视频探索之旅 | Webrtc 1对1音视频通话核心流程分析
  • Go语言实战案例-斐波那契数列生成器
  • 分表聚合助手类
  • UniApp TabBar 用户头像方案:绕过原生限制的实践
  • 依托CCLinkIE转ModbusTCP网关的转换达成西门子PLC连接配置案例
  • 涉及海量数据的查询SQL建议使用“数据库函数”封装并调用
  • Rust实战:高效对接Postman API
  • 【Nginx】nginx+lua+redis实现限流
  • 【Lua】闭包可能会导致的变量问题
  • 去中心化交易所(DEX)深度解析:解码行业头部项目
  • 双向广搜算法详解
  • 【现有资料整理】灵枢 - 用于医学领域的 SOTA 多模态大语言模型
  • 对Yii2中开启`authenticator`后出现的跨域问题-修复
  • .QOI: Lossless Image Compression in O(n) Time
  • 变量命名规则
  • git--gitlab
  • 性能远超Spring Cloud Gateway!Apache ShenYu如何重新定义API网关!