Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich JSON aus dem Anforderungstext in Go lesen, ohne dessen Inhalt zu verlieren?

Wie kann ich JSON aus dem Anforderungstext in Go lesen, ohne dessen Inhalt zu verlieren?

Linda Hamilton
Linda HamiltonOriginal
2024-11-02 08:43:02139Durchsuche

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

JSON aus dem Anfragetext in Go lesen

Bei der Verarbeitung von HTTP-Anfragen in einer Webanwendung ist die Erfassung des Anfragetextes für viele Vorgänge unerlässlich. Mit Go gibt es mehrere Ansätze, um diese Aufgabe zu erfüllen.

Stellen Sie sich das folgende Szenario vor: Sie müssen den rohen JSON-Text einer POST-Anfrage abrufen und in einer Datenbank speichern. Dazu muss der ursprüngliche Zustand des Körpers erhalten bleiben.

Das Problem:

Versuch, den Körper direkt mit json.NewDecoder zu dekodieren oder an eine Strukturdose zu binden zu leeren Ergebnissen oder Fehlern führen, da der http.Request.Body ein Puffer ist, der nicht mehrfach gelesen werden kann.

Die Lösung:

Zu erfassen Hier finden Sie eine Schritt-für-Schritt-Lösung:

  1. Textkörperinhalt lesen: Verwenden Sie ioutil.ReadAll, um den Inhalt des Textkörpers in ein Byte einzulesen array.
  2. Body wiederherstellen: Erstellen Sie einen neuen ioutil.NopCloser um das Byte-Array und weisen Sie ihn wieder context.Request().Body zu.
  3. Fahren Sie mit der Verarbeitung fort: Jetzt können Sie den Anforderungstext weiterhin verwenden, z. B. ihn an eine Struktur binden oder andere Vorgänge ausführen.

Beispielcode:

<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>

Quellen:

  • 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

Das obige ist der detaillierte Inhalt vonWie kann ich JSON aus dem Anforderungstext in Go lesen, ohne dessen Inhalt zu verlieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn