发送JSON请求以测试beego中的端点API失败,空体

时间:2016-01-22 06:49:39

标签: go beego

我正在尝试使用beego框架测试我的REST API的端点。

我的测试功能低于我用于发送JSON请求的功能:

func testHTTPJsonResp(url string) string {
    var jsonStr = []byte(`{"title":"Buy cheese and bread for breakfast."}`)
    req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr))
    req.Header.Set("X-Custom-Header", "myvalue")
    req.Header.Set("Content-Type", "application/json")

    beego.Error(err)
    w := httptest.NewRecorder()
    beego.BeeApp.Handlers.ServeHTTP(w, req)

    beego.Debug(w)

    return w.Body.String()
}

服务器确实收到请求,但请求的输入正文始终为empty

类似,我用来将表格数据发送到服务器works fine的功能。

func testHTTPResp(httpProt, url string, params map[string]interface{}) string {
    bodyBuf := &bytes.Buffer{}
    bodyWriter := multipart.NewWriter(bodyBuf)

    for key, val := range params {
        beego.Error(key + val.(string))
        _ = bodyWriter.WriteField(key, val.(string))

    }

    contentType := bodyWriter.FormDataContentType()
    bodyWriter.Close()

    r, _ := http.NewRequest(httpProt, url, bodyBuf)
    r.Header.Add("Content-Type", contentType)

    w := httptest.NewRecorder()
    beego.BeeApp.Handlers.ServeHTTP(w, r)

    beego.Debug(w)

    return w.Body.String()
}

问题:为什么服务器接收JSON请求正文为空,而类似的表单编码数据正常。现在已经坚持了几天,任何指针都受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

在Beego默认情况下,读取请求的正文已禁用。您需要将以下行添加到app.conf文件

copyrequestbody = true

这解决了这个问题。