在 Web 应用程序中处理 HTTP 请求时,捕获请求正文对于许多操作至关重要。使用 Go,有多种方法可以完成此任务。
考虑以下场景:您需要检索 POST 请求的原始 JSON 正文并将其存储在数据库中。为此,必须保留主体的原始状态。
问题:
尝试使用 json.NewDecoder 直接解码主体或将其绑定到结构可以由于 http.Request.Body 作为缓冲区的性质无法多次读取,导致结果为空或错误。
解决方案:
捕获请求正文同时保持其原始状态,这是一个分步解决方案:
示例代码:
<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>
来源:
以上是如何从 Go 中的请求正文中读取 JSON 而不丢失其内容?的详细内容。更多信息请关注PHP中文网其他相关文章!