采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
打印本次请求的入参可以在中间件中 all, err := ioutil.ReadAll(c.Request.Body) 这样获取 但是 response 就没办法拿到 c.next() readAll, err := ioutil.ReadAll(c.Request.Response.Body) 这样直接报错 response 对象是 nil 有好的办法吗?
这里和我刚才提到的是一样的 你的第一个readAll, err := ioutil.ReadAll(c.Request.Response.Body)可以运行,第二次就不行了,因为第一次读取后会被清空,这有点坑
不对呀 ,第一次读取的是c.Request.Body 第二次读的是c.Request.Response.Body;不是一个东西;而且我刚才注释掉上面的还是不行
入参采集果然也是也有问题;body 只能读一次;如果中间件读取了;后面就没了。。。这有好的方法统一打印这种入参与返回的信息吗?
非常感谢!
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")}
你的完整代码截图我看看 gin中有点变态的是如果你之前已经通过其他方法读取过这里的值了那么下一次你再读取就没有了
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") }
登录后可查看更多问答,登录/注册
快速转型Go工程师,成为具备双语言后端能力的开发者
636 1
838 1
1.4k 20
1.0k 11
960 10