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")
}
相关推荐
ssshooter2 小时前
Tauri 踩坑 appLink 修改后闪退
前端·ios·rust
二流小码农6 小时前
鸿蒙开发:上传一张参考图片便可实现页面功能
android·ios·harmonyos
开心就好202521 小时前
UniApp开发应用多平台上架全流程:H5小程序iOS和Android
后端·ios
开心就好20251 天前
免 Xcode 的 iOS 开发新选择?聊聊一款更轻量的 iOS 开发 IDE kxapp 快蝎
后端·ios
恋猫de小郭1 天前
Apple 的 ANE 被挖掘,AI 硬件公开,宣传的 38 TOPS 居然是"数字游戏"?
前端·人工智能·ios
忆江南2 天前
iOS 深度解析
flutter·ios
没有故事的Zhang同学2 天前
05-主题|事件响应者链@iOS-应用场景与进阶实践
ios
stark张宇2 天前
微服务架构必备:Gin + gRPC + Consul + Nacos + GORM 打造用户服务
微服务·gin·grpc
FeliksLv2 天前
尝试给Lookin 支持 MCP
ios
没有故事的Zhang同学2 天前
01-研究系统框架@Web@iOS | JavaScriptCore 框架:从使用到原理解析
ios