在一次开发中,通过中间件访问请求中的post参数,于是使用 ioutil.ReadAll
来读取body中的内容并做相应的验证,代码如下:
var pj map[string]interface{}
body := c.Request.Body
data, _ := ioutil.ReadAll(body)
一开始一切都挺美好,但等到测试的时候发现接口中调用 BindJSON
(项目使用的框架是 gin) 返回错误,错误信息如下:
bind multipart: NextPart: EOF
经过一番排查发现是因为ioutil.ReadAll()
方法会将,会在你读取之后,就没有了内容,既然知道了原因,解决方法也随之出现,只需要在获取之后,从新将 body 的内容写入,代码如下:
c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(data))
至此问题得到了解决
参考链接
Golang: Read from an io.ReadWriter without losing its content