Maison > développement back-end > Golang > le corps du texte

Comment lire JSON à partir du corps de la requête en Go sans perdre son contenu ?

Linda Hamilton
Libérer: 2024-11-02 08:43:02
original
149 Les gens l'ont consulté

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

Lecture JSON à partir du corps de la requête dans Go

Lors du traitement des requêtes HTTP dans une application Web, la capture du corps de la requête est essentielle pour de nombreuses opérations. Avec Go, il existe plusieurs approches pour accomplir cette tâche.

Considérez le scénario suivant : vous devez récupérer le corps JSON brut d'une requête POST et le stocker dans une base de données. Pour ce faire, l'état d'origine du corps doit être préservé.

Le problème :

Tenter de décoder directement le corps à l'aide de json.NewDecoder ou de le lier à une structure peut conduire à des résultats vides ou à des erreurs en raison de la nature du http.Request.Body en tant que tampon qui ne peut pas être lu plusieurs fois.

La solution :

Pour capturer le corps de la requête tout en conservant son état d'origine, voici une solution étape par étape :

  1. Lire le contenu du corps : Utilisez ioutil.ReadAll pour lire le contenu du corps dans un octet array.
  2. Restaurer le corps : Créez un nouveau ioutil.NopCloser autour du tableau d'octets et attribuez-le à nouveau à context.Request().Body.
  3. Poursuivre le traitement : Vous pouvez maintenant continuer à utiliser le corps de la requête, par exemple en le liant à une structure ou en effectuant d'autres opérations.

Exemple de code :

<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>
Copier après la connexion

Sources :

  • 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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!