首頁  >  文章  >  後端開發  >  如何從 Go 中的請求正文中讀取 JSON 而不丟失其內容?

如何從 Go 中的請求正文中讀取 JSON 而不丟失其內容?

Linda Hamilton
Linda Hamilton原創
2024-11-02 08:43:02139瀏覽

How to Read JSON from the Request Body in Go Without Losing its Content?

從 Go 中的請求正文讀取 JSON

在 Web 應用程式中處理 HTTP 請求時,捕獲請求正文對於許多操作至關重要。使用 Go,有多種方法可以完成此任務。

考慮以下場景:您需要檢索 POST 請求的原始 JSON 正文並將其儲存在資料庫中。為此,必須保留主體的原始狀態。

問題:

嘗試使用json.NewDecoder 直接解碼主體或將其綁定到結構可以由於http.Request.Body 作為緩衝區的性質無法多次讀取,導致結果為空或錯誤。

解決方案:

捕獲請求正文同時保持其原始狀態,這是一個逐步解決方案:

  1. 讀取正文內容:使用ioutil.ReadAll 將正文內容讀取為位元組array.
  2. 恢復正文: 在位元組數組周圍建立一個新的ioutil.NopCloser 並將其指派回context.Request().Body。
  3. 繼續處理: 現在您可以繼續使用請求正文,例如將其綁定到結構體或執行其他操作。

範例程式碼:

<code class="go">// Read the Body content
var bodyBytes []byte
if context.Request().Body != nil {
    bodyBytes, _ = ioutil.ReadAll(context.Request().Body)
}

// Restore the io.ReadCloser to its original state
context.Request().Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytes))

// Continue to use the Body, like Binding it to a struct:
order := new(models.GeaOrder)
error := context.Bind(order)</code>

來源:

  • 來源:
  • http://grok. com/t/gg/golang-nuts/12adq8a2ys/go-nuts-re-reading-http -response-body-or-any-reader
https://medium.com/@xoen/golang- read-from-an-io-readwriter-without-loosing-its-content-2c6911805361

以上是如何從 Go 中的請求正文中讀取 JSON 而不丟失其內容?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn