Отправить запрос JSON для тестирования API конечной точки в beego не работает с пустым телом

Я пытаюсь протестировать конечную точку моего REST API, используя структуру beego.

Ниже приведена моя тестовая функция, которую я использую для отправки запроса 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 как пустое, в то время как данные с аналогичной закодированной формой проходят нормально. Застряли на этом уже несколько дней, любые указатели высоко ценятся.


person lionelmessi    schedule 22.01.2016    source источник
comment
У меня аналогичная проблема, мой copyrequestbody установлен на true Я вообще не вижу, чтобы запрос поступал на сервер, но почему-то ответ пуст   -  person poorva    schedule 29.04.2016
comment
ваш запрос не доходит до сервера?   -  person lionelmessi    schedule 29.04.2016
comment
Я полагаю, что в этом случае изнутри вызывается метод ListenAndServe. Единственный фактор, по которому я могу сказать, что сервер работает правильно, - это если я сделаю действительный запрос, я получу 200 OK, но для недопустимых запросов я получаю 404 На самом деле я опубликовал свою актуальную проблему здесь.   -  person poorva    schedule 02.05.2016
comment
Я получаю unmatch GET для моего URL, и он возвращает статус 404, но на самом деле, используя Postman, я получаю ответ здесь   -  person souravlahoti    schedule 19.10.2016


Ответы (1)


Чтение тела запроса в Beego по умолчанию отключено. Вам нужно добавить следующую строку в app.conf файл

copyrequestbody = true

Это решает проблему.

person lionelmessi    schedule 22.01.2016