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")
}
相关推荐
linweidong11 小时前
实战救火型 从 500MB 降到 50MB:高频业务场景下的 iOS 内存急救与避坑指南
macos·ios·objective-c·cocoa·ios面试·nstimer·ios面经
山里看瓜13 小时前
解决 iOS 上 Swiper 滑动图片闪烁问题:原因分析与最有效的修复方式
前端·css·ios
网络研究院13 小时前
苹果修复了iOS系统中两个被定向攻击利用的零日漏洞
macos·ios·cocoa
如此风景14 小时前
IOS SwiftUI 全组件详解
ios
雾散声声慢14 小时前
解决 iOS 上 Swiper 滑动图片闪烁问题:原因分析与最有效的修复方式
前端·css·ios
QuantumLeap丶17 小时前
《Flutter全栈开发实战指南:从零到高级》- 24 -集成推送通知
android·flutter·ios
YungFan17 小时前
iOS开发之MetricKit监控App性能
ios·swiftui·swift
二流小码农18 小时前
鸿蒙开发:上架困难?谈谈我的上架之路
android·ios·harmonyos
图图大恼18 小时前
在iOS上体验Open-AutoGLM:从安装到流畅操作的完整指南
人工智能·ios·agent
笑尘pyrotechnic19 小时前
[iOS原理] Block的本质
ios·objective-c·cocoa