gin 如何打印请求的入参与返回

来源:1-2 课程资源获取方式 - 非常重要!!!

Anthony_Duan

2021-03-13

打印本次请求的入参可以在中间件中 all, err := ioutil.ReadAll(c.Request.Body)
这样获取
但是 response 就没办法拿到
c.next()
readAll, err := ioutil.ReadAll(c.Request.Response.Body)
这样直接报错 response 对象是 nil
有好的办法吗?

写回答

3回答

bobby

2021-03-13

这里和我刚才提到的是一样的 你的第一个readAll, err := ioutil.ReadAll(c.Request.Response.Body)可以运行,第二次就不行了,因为第一次读取后会被清空,这有点坑

0
3
Anthony_Duan
非常感谢!
2021-03-13
共3条回复

Anthony_Duan

提问者

2021-03-13

func Resp() gin.HandlerFunc {
  return func(c *gin.Context) {

     all, err := ioutil.ReadAll(c.Request.Body)
     if err != nil {
        panic(err)
     }
     //请求的 body 可以获取
     fmt.Println(string(all))
     c.Next()
     //接下来这行报错
     readAll, err := ioutil.ReadAll(c.Request.Response.Body)
     if err != nil {
        panic(err)
     }
     fmt.Println(string(readAll))
  }
}

func main() {
  r := gin.Default()
  r.Use(Resp())
  r.POST("/test",test)
  //r.GET("/login/:username/:password", login)
  //r.GET("/verify/:token", verify)
  //r.GET("/refresh/:token", refresh)
  //r.GET("/sayHello/:token", sayHello)
  _ = r.Run(":8000")
}

func test(c *gin.Context) {
  resp := struct {
     A int `json:"a"`
     B string `json:"b"`
  }{
     A: 500,
     B: "600",
  }
  //c.JSONP(http.StatusOK, resp)
  c.JSON(http.StatusOK,resp)
  fmt.Println("500")
}

0
0

bobby

2021-03-13

你的完整代码截图我看看 gin中有点变态的是如果你之前已经通过其他方法读取过这里的值了那么下一次你再读取就没有了

0
1
Anthony_Duan
func Resp() gin.HandlerFunc { return func(c *gin.Context) { all, err := ioutil.ReadAll(c.Request.Body) if err != nil { panic(err) } //请求的 body 可以获取 fmt.Println(string(all)) c.Next() //接下来这行报错 readAll, err := ioutil.ReadAll(c.Request.Response.Body) if err != nil { panic(err) } fmt.Println(string(readAll)) } } func main() { r := gin.Default() r.Use(Resp()) r.POST("/test",test) //r.GET("/login/:username/:password", login) //r.GET("/verify/:token", verify) //r.GET("/refresh/:token", refresh) //r.GET("/sayHello/:token", sayHello) _ = r.Run(":8000") } func test(c *gin.Context) { resp := struct { A int `json:"a"` B string `json:"b"` }{ A: 500, B: "600", } //c.JSONP(http.StatusOK, resp) c.JSON(http.StatusOK,resp) fmt.Println("500") }
2021-03-13
共1条回复

Go+Python打造电商系统 自研微服务框架 抓紧高薪机遇

快速转型Go工程师,成为具备双语言后端能力的开发者

508 学习 · 530 问题

查看课程