duanliaogui4133 2014-06-08 23:20
浏览 746
已采纳

在Go中解码请求正文-为什么得到EOF?

I'm using the Beego framework to build a web application, and I'm trying to hand it some JSON encoded data. Roughly, this is what I have:

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
  }
}

Per this tutorial, the above Should Just Work (tm).

My problem is this: bytesRead, err := this.Ctx.Request.Body.Read(p) is returning 0 bytes read and the err.Error() is EOF.

The request.ContentLength, however, is a sane number of bytes (19 or more, depending on what data I type in).

I can't figure out why the request would appear to have some length, but would fail on Read. Any ideas?

  • 写回答

1条回答 默认 最新

  • douchun5969 2014-11-29 15:21
    关注

    If you are trying to reach a JSON payload in Beego, you'll want to call

    this.Ctx.Input.RequestBody
    

    That returns a []byte array of the sent payload. You can then pass it to a function like:

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

    Where datapoint is the struct you are attempting to unmarshall your data into.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥500 52810做蓝牙接受端
  • ¥15 基于PLC的三轴机械手程序
  • ¥15 多址通信方式的抗噪声性能和系统容量对比
  • ¥15 winform的chart曲线生成时有凸起
  • ¥15 msix packaging tool打包问题
  • ¥15 finalshell节点的搭建代码和那个端口代码教程
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录