1、获取Get请求参数
Get请求示例 :
/getUserInfo?id=1
获取请求参数所用函数
func (c *gin.Context) Query(key string) string
func (c *gin.Context) DefaultQuery(key string, defaultValue string) string
func (c *gin.Context) GetQuery(key string) (string, bool)
示例:
func Handler(c *gin.Context){
//获取id参数,通过 Query 获取参数,返回string类型,没有则为空串
idStr := c.Query("id")
//获取 id 参数,通过 DefaultQuery 获取参数,返回string类型,没有则为defaultValue
defaultValue := "xxx"
idStr := c.DefaultQuery("id", defaultValue)
//获取 id 参数,通过 GetQuery 获取参数,返回string类型,第二个参数,可判断是否存参数
idStr, ok := c.GetQuery("id")
if ok{
fmt.Println("存在")
}else{
fmt.Println("不存在")
}
}
Get请求示例:
/getUserInfo/:id/ -- /getUserInfo/1/
参数的处理
idStr := c.Param("id")
var id int
var err error
if idStr!= "" {
id, err = strconv.Atoi(idStr)
if err != nil {
ginUtil.SendBadRequest(c, "cannot parse: id")
return
}
}
2、Post参数的获取
从表单中获取数据
获取Post请求参数的常用函数
func (c *gin.Context) PostForm(key string) string
func (c *gin.Context) DefaultPostForm(key string, defaultValuen string) string
func (c *gin.Context) GetPostForm(key string) (string, bool)
示例:
func Hanlder(c *gin.Context){
//从表单中获取,没有则为空""
idStr := c.PostForm("id")
//从表单中获取,没有则为默认值 "123"
idStr := c.DefaultPostForm("id", "123")
//从表单中获取,并且判断是否存在
idStr, ok := c.GetPostForm("id")
if !ok {
// 参数不存在
}
}
3、请求体中的参数
对于GET、POST、PATCH、PUT请求,对于请求体中的数据处理基本相同 (DELETE如果想处理请求体中的数据,就要使用POST请求处理)
body:
{
"name":"stefan",
"hobby":"soccer"
}
解析Json参数常用的三种方式,具体视情况而定:内部传递了一个binding.JSON来解析
• BindJson() 返回错误,并写400的状态码
func (c *Context) BindJSON(obj interface{}) error {
return c.MustBindWith(obj, binding.JSON)
}
• ShouldBindJSON() 只会返回错误信息,不会写400的错误状态码
// ShouldBindJSON is a shortcut for c.ShouldBindWith(obj, binding.JSON).
func (c *Context) ShouldBindJSON(obj interface{}) error {
return c.ShouldBindWith(obj, binding.JSON)
}
// ShouldBindWith binds the passed struct pointer using the specified binding engine.
// See the binding package.
func (c *Context) ShouldBindWith(obj interface{}, b binding.Binding) error {
return b.Bind(c.Request, obj)
}
• ShouldBindWith() 根据b的类型去绑定json
⚠️ 除以上几种外还有很多处理方式,具体参考源码
示例:
func method(c *gin.Context){
type Req struct{
Name string `json:"name" binding:"required"`
Hobby string `json:"hobby" binding:"required"`
}
var r Req
// 选择那种解析方式具体情况来定
if err := c.BindJson(&r); err != nil {
//处理错误
}
//通过 r.Name r.Hobby 使用数据
}
DELETE如果只根据id进行删除
/user/del/:id
idStr := c.Param("id")
var id int
var err error
if idStr!= "" {
id, err = strconv.Atoi(idStr)
if err != nil {
ginUtil.SendBadRequest(c, "cannot parse: id")
return
}
}