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")
}
相关推荐
FreeBuf_3 分钟前
思科IOS零日RCE漏洞正遭野外利用(CVE-2025-20352)
macos·ios·cocoa
00后程序员张5 小时前
iOS 26 系统流畅度深度剖析,Liquid Glass 视效与界面滑动的实际测评
android·macos·ios·小程序·uni-app·cocoa·iphone
猪哥帅过吴彦祖5 小时前
Flutter 系列教程:布局基础 (下) - Stack 绝对定位和 Expanded 弹性布局
前端·flutter·ios
2501_915921437 小时前
uWSGI + HTTPS 实战指南,配置、证书、TLS 终止与调试全流程(适用于生产与真机抓包排查)
网络协议·http·ios·小程序·https·uni-app·iphone
2501_9160088911 小时前
iOS 26 系统流畅度剖析:Liquid Glass 动画表现 + 用户反馈
android·macos·ios·小程序·uni-app·cocoa·iphone
2501_9159090619 小时前
Python 爬虫 HTTPS 实战,requests httpx aiohttp 抓取技巧、证书问题与抓包调试全流程
爬虫·python·ios·小程序·https·uni-app·iphone
会跑的葫芦怪1 天前
Go tool pprof 与 Gin 框架性能分析完整指南
开发语言·golang·gin
00后程序员张1 天前
iOS 开发环境搭建完整指南 Xcode 安装配置、iOS 开发工具选择、ipa 打包与 App Store 上架实战经验
android·macos·ios·小程序·uni-app·iphone·xcode
折七1 天前
expo sdk53+ 集成极光推送消息推送 ios swift
前端·javascript·ios
猪哥帅过吴彦祖1 天前
Flutter 系列教程:布局基础 (上) - `Container`, `Row`, `Column`, `Flex`
前端·flutter·ios