前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在gin中获取响应体内容?

如何在gin中获取响应体内容?

原创
作者头像
Johns
修改2022-06-30 10:33:08
10.9K0
修改2022-06-30 10:33:08
举报
文章被收录于专栏:代码工具代码工具

实现思路: 对gin的responseWriter进行包装, 每次写往请求方写响应数据的时候,将响应数据返回出去。

step1: 定义一个新的CustomResponseWriter,通过组合方式持有一个gin.ResponseWriter和response body缓存。

代码语言:txt
复制
type CustomResponseWriter struct {
   gin.ResponseWriter
   body *bytes.Buffer
}

func (w CustomResponseWriter) Write(b []byte) (int, error) {
   w.body.Write(b)
   return w.ResponseWriter.Write(b)
}

func (w CustomResponseWriter) WriteString(s string) (int, error) {
   w.body.WriteString(s)
   return w.ResponseWriter.WriteString(s)
}

step2. 然后在中间件中进行替换和使用

代码语言:txt
复制
func AccessLogHandler() gin.HandlerFunc {
   return func(c *gin.Context) {
      blw := &CustomResponseWriter{body: bytes.NewBufferString(""), ResponseWriter: c.Writer}
      c.Writer = blw
      c.Next()
      fmt.Sprintf("url=%s, status=%d, resp=%s", c.Request.URL, c.Writer.Status(), blw.body.String())
   }
}

step3: 使用中间件

代码语言:txt
复制
//初始化中间件
func InitMiddleware(r *gin.Engine) {
   // 生成请求唯一id
   r.Use(setUUIDContext())
   //access log
   r.Use(AccessLogHandler())
   // 跨域请求处理
   r.Use(Cors())
   // 异常保护
   r.Use(Recover)
}

测试验证

启动main函数后看到Console中的内容

代码语言:txt
复制
url=/microservice/api/v1/verify_code_get, status=200, resp={"code":0,"msg":"success"}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实现思路: 对gin的responseWriter进行包装, 每次写往请求方写响应数据的时候,将响应数据返回出去。
    • step1: 定义一个新的CustomResponseWriter,通过组合方式持有一个gin.ResponseWriter和response body缓存。
      • step2. 然后在中间件中进行替换和使用
        • step3: 使用中间件
          • 测试验证
          相关产品与服务
          消息队列 TDMQ
          消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档