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 -X POST \
-H 'Content-type:application/json' \
-d '{"username":"zhangsan","password": "qwerty"}' \
http://192.168.0.10:8001/v1/loginjson
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)
表单数据解析与绑定
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)
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 -d "username=zhangsan&password=qwerty" \
http://192.168.0.10:8001/v1/loginform
URI数据解析与绑定
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 'http://192.168.0.10:8001/v1/loginuri/zhangsan/asdfgh'
XML数据解析与绑定
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)
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")
}