gin对各种请求中的参数的处理

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
        }
    }
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值