在Go中解码请求主体 - 为什么我要获得EOF?

时间:2014-06-08 23:20:22

标签: json go request beego

我正在使用Beego框架来构建一个Web应用程序,我正在尝试将一些JSON编码数据交给它。粗略地说,这就是我所拥有的:

import (
"github.com/astaxie/beego"
)

type LoginController struct {
beego.Controller
}

func (this *LoginController) Post() {
  request := this.Ctx.Request
  length := request.ContentLength
  p := make([]byte, length)
  bytesRead, err := this.Ctx.Request.Body.Read(p)
  if err == nil{
    //blah
  } else {
    //tell me the length, bytes read, and error
  }
}

this tutorial,上述应该正常工作(tm)。

我的问题是:bytesRead, err := this.Ctx.Request.Body.Read(p)返回0字节读取而err.Error()EOF

然而,request.ContentLength是一个合理的字节数(19或更多,取决于我输入的数据)。

我无法弄清楚为什么请求似乎有一些长度,但在Read上会失败。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

如果您尝试在Beego中获取JSON有效负载,则需要致电

this.Ctx.Input.RequestBody

返回发送的有效负载的[]字节数组。然后,您可以将其传递给类似的函数:

var datapoint Datapoint
json.Unmarshal(this.Ctx.Input.RequestBody, &datapoint)

如果datapoint是您尝试解组数据的结构。