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")
}
相关推荐
2501_9159184110 小时前
iOS编程用什么软件好?主流工具Xcode、AppCode、CodeRunner与新兴快蝎对比
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
终端安全笔记19 小时前
iOS 27 之后「策略空转」:设备升级不报错,但旧策略不再管它
android·网络·安全·ios·智能手机
ToDesk_Daas19 小时前
随时随地手搓app!手机远程 Vibe Coding 实操分享
智能手机·电脑·iphone
9765033351 天前
iOS 上架 4.3a 被拒【uniapp专讲】
flutter·ios·objective-c·uniapp·swift
黑化旺仔1 天前
【OC】KVO
macos·ios·objective-c·cocoa
HouWan2 天前
SwiftUI 小技巧:如何读取 SwiftUI Font 的详细信息
ios·swiftui·apple
李游Leo2 天前
HarmonyOS 7 实战开发 05:把页面做到可上线状态
ios·harmonyos
终端安全笔记2 天前
描述文件、企业证书、MDM 不是三个名字,是三层
android·ios·智能手机
传奇开心果编程2 天前
【SwiftUI入门练中学】第1课 从零开始
学习·ui·ios·swiftui·swift