php获取response body_[Go - Note] http.Response.Body 多次读取处理

问题

在使用gin框架时(其他框架或原生request也类似)遇到需要先读取body再把body作为参数传给其他函数或方法处理的情况,但用

c.ShouldBindJSON()

读取body后,再次读取body为空或出错。

解决方案

利用 ioutil包提供的以下函数

// ReadAll reads from r until an error or EOF and returns the data it read.

// A successful call returns err == nil, not err == EOF. Because ReadAll is

// defined to read from src until EOF, it does not treat an EOF from Read

// as an error to be reported.

func ReadAll(r io.Reader) ([]byte, error)

// NopCloser returns a ReadCloser with a no-op Close method wrapping

// the provided Reader r.

func NopCloser(r io.Reader) io.ReadCloser

具体代码参考如下:

var receiveBody XXX

bodyBytes, _ := ioutil.ReadAll(c.Request.Body)

err := json.Unmarshal(bodyBytes, &receiveBody)

if err != nil {

...........

return

}

c.Request.Body.Close() // must close

c.Request.Body=ioutil.NopCloser(bytes.NewBuffer(bodyBytes))

c.Set("aaa", aaa)

此外,如以上代码所示,可以用c.Set()写入键值对,后续可以用c.GetString("aaa")方式获得该值。

有疑问加站长微信联系(非本文作者)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值