获取请求体json数据的方式:
// 方式一:请求json数据
data, _ := ioutil.ReadAll(c.Request.Body)
// 方式二
var data model.Post
if err := c.BindJSON(&data); err != nil {
internal.Output(c, errno.ErrValidation, err.Error())
}
在中间件中使用方式一记录请求记录到日志中,使用方式二在业务代码中验证请求参数合法性,此时方式二在绑定json数据的时候会报EOF错误;
body中的内容 ioutil.ReadAll 读取过就不存在了。
解决方法:将中间件读取出来的body内容,再重新写入请求体body中:
// 获取请求json数据
data, _ := ioutil.ReadAll(c.Request.Body)
// 再重新写回请求体body中,ioutil.ReadAll会清空c.Request.Body中的数据
c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(data))