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

    lisi 123456 """ 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")
}
相关推荐
皓月盈江12 小时前
GO使用Gin框架实现模板定义、解析与渲染
linux·golang·go·gin·定义模板·解析模板·渲染模板
茶底世界之下14 小时前
iPhone Duo 适配实战,Awaking 踩过的 8 个坑
ios·swiftui·swift
跨境数据猎手15 小时前
HTTP 响应体编码与压缩:识别、解码
网络协议·http·ios
也非非也15 小时前
iPhone 中国区 AI 落地:Apple 与阿里千问合作的技术观察
大数据·人工智能·ios·agent·iphone·智子
码剑客16 小时前
Gin+GORM+Redis 项目开发常见性能坑汇总(Go后端避坑指南)
redis·后端·golang·gin
茶底世界之下16 小时前
同一片泳池,清透还是奶油胶片?用 Awaking 做两版成片
ios
Digitally18 小时前
如何将iPhone照片传输到U盘(6种简单方法)
iphone
2501_9160088919 小时前
iOS App 图标、启动屏和多语言搭配 方法,上架前使用KXBuild一次做好 App 图标
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
2501_9159184119 小时前
iOS 推送通知怎么实现,从 APNs p8 密钥到 iOS 真机收到第一条推送
vscode·ios·objective-c·个人开发·swift·敏捷流程
茶底世界之下2 天前
雨夜街角裁成方图,人物与冷暖光还能共存吗?
ios