2014-06-08 6 views
1

Beego 프레임 워크를 사용하여 웹 응용 프로그램을 작성하고 있으며 일부 JSON 인코딩 데이터를 전달하려고합니다. 대략이 내가 가진 무엇 :Go에서 요청 본문 디코딩 - EOF를받는 이유는 무엇입니까?

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

, 위에서 그냥 (TM)를 작동합니다.

내 문제는 다음과 같습니다. bytesRead, err := this.Ctx.Request.Body.Read(p)은 0 바이트를 읽고, err.Error()EOF을 반환합니다.

그러나 request.ContentLength은 정상적인 바이트 수 (입력 한 데이터에 따라 19 이상)입니다.

요청 길이가 다소 길어 보이는 이유를 알 수 없지만 Read에서 실패합니다. 어떤 아이디어? 당신이 Beego에서 JSON 페이로드를 연결하려는 경우

+0

아마 다른 코드가 이미 요청 본문을 읽었 음을 의미합니다. 프로그램의 나머지 부분이 무엇을하는지 모른 채 정확하게 말하기는 어렵습니다. –

+0

그 점을 다시 한 번 확인 하겠지만, 지금 당장 요청 기관을 읽는 유일한 방법은 확실합니다. – Chris

+0

저는 사용중인 Beego 프레임 워크에 익숙하지 않습니다. 요청 본문 자체를 읽는지 여부를 확인하는 것이 좋습니다. –

답변

2

, 당신은 전송 된 페이로드의 [] 바이트 배열을 반환

this.Ctx.Input.RequestBody 

를 호출 할 수 있습니다. 다음과 같이 함수에 전달할 수 있습니다.

여기서 datapoint는 데이터를 언 마샬링하려는 구조체입니다.