请求参数
GET
请求
普通参数
ctx.Query
:获取参数ctx.DefaultQuery
:可设置参数默认值ctx.GetQuery
:可验证参数是否传递
Go
func (*gin.Context).Query(key string) (value string)
func (*gin.Context).DefaultQuery(key string, defaultValue string) string
func (*gin.Context).GetQuery(key string) (string, bool)
代码示例
Go
func queryHanlder(ctx *gin.Context) {
user_name := ctx.Query("userName")
age := ctx.Query("age")
// 可以设置默认值
like := ctx.DefaultQuery("like", "篮球")
// 判断参数是否存在
password, isPasswordExist := ctx.GetQuery("password")
// ctx.Query 张三 88
// fmt.Println("ctx.Query", user_name, age)
fmt.Println("ctx.Query", user_name, age, like)
ctx.JSON(http.StatusOK, gin.H{
"user_name": user_name,
"age": age,
"like": like,
"password": password,
"isPasswordExist": isPasswordExist,
})
}
访问 /get_query?userName=张三&age=22
json
{
"age": "22",
"isPasswordExist": false,
"like": "篮球",
"password": "",
"user_name": "张三"
}
关于bindxxx
绑定器,点击这里
ctx.BindQuery
:绑定并为结构体赋值,当bind
为必须时,如果客户端未传值,会报400
ctx.ShouldBindQuery
::绑定并为结构体赋值,当bind
为必须时,如果客户端未传值,会使用类型默认值可以使用
form:"xxx"
这个tag
来设置客户端传的key
使用
binding:"required"
设置字段必填
Go
func (*gin.Context).BindQuery(obj any) error
func (*gin.Context).ShouldBindQuery(obj any) error
代码示例
Go
type User struct {
UserName string `form:"user_name" json:"user_name"`
Age int `form:"age" json:"age"`
Address string `form:"address" json:"address" binding:"required"`
}
func queryBindHanlder(ctx *gin.Context) {
var user User
// err := ctx.BindQuery(&user)
err := ctx.ShouldBindQuery(&user)
if err != nil {
fmt.Println("bindQuery Error", err)
}
ctx.JSON(http.StatusOK, user)
}
访问/get_bind_query?user_name=张三
json
{
"user_name": "张三",
"age": 0,
"address": ""
}
数组参数
ctx.QueryArray
:获取key
相同的多个参数ctx.QueryArray
:获取key
相同的多个参数,可检测是否传值
Go
func (*gin.Context).QueryArray(key string) (values []string)
func (*gin.Context).GetQueryArray(key string) (values []string, ok bool)
代码示例
Go
func multiQueryHanlder(ctx *gin.Context) {
// usernames := ctx.QueryArray("userName")
values, ok := ctx.GetQueryArray("userName")
// ctx.JSON(http.StatusOK, usernames)
ctx.JSON(http.StatusOK, gin.H{ "usernames": values, "ok": ok })
}
访问/get_multi_query?userName=zhang&userName=li&userName=wang
json
{
"ok": true,
"usernames": [
"zhang",
"li",
"wang"
]
}
map
参数
ctx.QueryMap
:获取map
参数ctx.GetQueryMap
:获取map
参数,可检测是否传值
代码示例
Go
func mapQueryHanlder(ctx *gin.Context) {
infoMap := ctx.QueryMap("info")
infoMap, isInfoMapExist := ctx.GetQueryMap("info")
// ctx.JSON(http.StatusOK, infoMap)
ctx.JSON(http.StatusOK, gin.H{ "infoMap": infoMap, "isInfoMapExist": isInfoMapExist })
}
访问/get_map_query
json
{
"infoMap": {},
"isInfoMapExist": false
}
访问/get_map_query?info[name]=zhang&info[age]=22
json
{
"infoMap": {
"age": "22",
"name": "zhang"
},
"isInfoMapExist": true
}
POST
请求
form
表单参数
ctx.PostForm
:获取from
单个字段值ctx.DefaultPostForm
::获取from
单个字段值,可设置默认值ctx.PostFormArray
:获取from
多个相同key
字段值ctx.PostFormMap
:获取from
中map
值
Go
func postFormHanlder(ctx *gin.Context) {
userName := ctx.PostForm("userName")
password := ctx.PostForm("password")
address := ctx.PostFormArray("address")
addressMap := ctx.PostFormMap("addressMap")
like := ctx.DefaultPostForm("like", "羽毛球")
ctx.JSON(http.StatusOK, gin.H{
"userName": userName,
"password": password,
"address": address,
"addressMap": addressMap,
"like": like,
})
}
参数如上,返回如下:
json
{
"address": [
"shanghai",
"beijing"
],
"addressMap": {
"p": "河南",
"s": "郑州"
},
"like": "羽毛球",
"password": "123455",
"userName": "zhang"
}
json
参数
ctx.ShouldBindJSON
:设置json
Go
type User struct {
UserName string `form:"user_name" json:"user_name"`
Age int `form:"age" json:"age"`
Address string `form:"address" json:"address" binding:"required"`
}
func postJsonHanlder(ctx *gin.Context) {
var user User
err := ctx.ShouldBindJSON(&user)
if err != nil {
fmt.Println("ctx.ShouldBindJSON", err)
}
ctx.JSON(http.StatusOK, user)
}
访问/post_json
,传值如下
json
{
"user_name": "222",
"age": 66,
"address": "shanghai"
}
响应如下:
json
{
"user_name": "222",
"age": 66,
"address": "shanghai"
}
Param
参数
ctx.Param
:获取param
Go
func paramHanlder(ctx *gin.Context) {
userName := ctx.Param("userName")
age := ctx.Param("age")
ctx.JSON(http.StatusOK, gin.H{"userName": userName, "age": age})
}
路由/get_param/:userName/:age
,访问/get_param/zhang/22
json
{
"age": "22",
"userName": "zhang"
}