Gin获取参数
Gin获取参数
表单提交,json提交以及Restful参数提交
package main
import (
"encoding/json"
"fmt"
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
"data": nil,
})
})
//获取querystring参数 也就是url?拼接的参数 /user/search?username=小王子
r.GET("/user/search", func(c *gin.Context) {
query1 := c.Query("username")
query2 := c.DefaultQuery("username","")
c.JSON(http.StatusOK, gin.H{
"username1": query1,
"username2": query2,
})
})
//获取 提交表单数据
r.POST("/user/login", func(c *gin.Context) {
username := c.PostForm("username")
pwd := c.PostForm("pwd")
c.JSON(http.StatusOK, gin.H{
"username": username,
"pwd": pwd,
})
})
//POST 获取 提交的json数据
r.POST("/user/postJson", func(c *gin.Context) {
// 从c.Request.Body读取请求数据
b, _ := c.GetRawData()
// 定义map或结构体
var m map[string]interface{}
// 反序列化
_ = json.Unmarshal(b, &m)
c.JSON(http.StatusOK, m )
})
// Restful参数
//获取path参数 类似java中的 @pathvariable 拿取url后的参数
// http://127.0.0.1:9090/user/variable/root/北京
r.GET("/user/variable/:username/:address", func(c *gin.Context) {
username := c.Param("username")
address := c.Param("address")
c.JSON(http.StatusOK, gin.H{
"username": username,
"address": address,
})
})
// ———————————————————— 反射获取各种参数 ————————————————————————————
//ShouldBind会按照下面的顺序解析请求中的数据完成绑定:
//
//如果是 GET 请求,只使用 Form 绑定引擎(query)。
//如果是 POST 请求,首先检查 content-type 是否为 JSON 或 XML,然后再使用 Form(form-data)。
//定义结构体以及tag
type Login struct {
User string `form:"user" json:"user" binding:"required"`
Password string `form:"password" json:"password" binding:"required"`
}
//获取 json数据
r.POST("/api/json", func(c *gin.Context) {
var login Login
if err := c.ShouldBind(&login); err == nil {
fmt.Printf("请求的 login数据 : %#v\n", login)
c.JSON(http.StatusOK, gin.H{
"data":login,
})
} else {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
}
})
// 绑定form表单示例 (user=tom&password=123456)
r.POST("/api/loginForm", func(c *gin.Context) {
var login Login
// ShouldBind()会根据请求的Content-Type自行选择绑定器
if err := c.ShouldBind(&login); err == nil {
c.JSON(http.StatusOK, gin.H{
"data":login,
})
} else {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
}
})
// 绑定 url后拼接参数 示例 (/login ?user=tom&password=123456)
r.GET("/api/loginForm", func(c *gin.Context) {
var login Login
// ShouldBind()会根据请求的Content-Type自行选择绑定器
if err := c.ShouldBind(&login); err == nil {
c.JSON(http.StatusOK, gin.H{
"data":login,
})
} else {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
}
})
// ———————————————————— 反射获取各种参数 ————————————————————————————
r.Run(":9090") // 监听并在 0.0.0.0:9090 上启动服务
}