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回答
-
这里和我刚才提到的是一样的 你的第一个readAll, err := ioutil.ReadAll(c.Request.Response.Body)可以运行,第二次就不行了,因为第一次读取后会被清空,这有点坑
032021-03-13 -
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")
}00 -
bobby
2021-03-13
你的完整代码截图我看看 gin中有点变态的是如果你之前已经通过其他方法读取过这里的值了那么下一次你再读取就没有了
012021-03-13
相似问题