首页 >后端开发 >Golang >如何从 Go 中的请求正文中读取 JSON 而不丢失其内容?

如何从 Go 中的请求正文中读取 JSON 而不丢失其内容?

Linda Hamilton
Linda Hamilton原创
2024-11-02 08:43:02221浏览

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://grokbase.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