Maison > développement back-end > Golang > Comment capturer et décoder le corps d'une requête JSON dans Go ?

Comment capturer et décoder le corps d'une requête JSON dans Go ?

Susan Sarandon
Libérer: 2024-11-02 14:39:30
original
1018 Les gens l'ont consulté

How to Capture and Decode JSON Request Body in Go?

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

Lors du développement d'API, il est souvent nécessaire de capturer le corps JSON brut d'une requête POST. Dans Node.js, cette tâche est simple avec la propriété request.payload. Cependant, dans Go, l'approche peut être moins évidente au départ.

Le défi

Le corps JSON est stocké dans le type io.ReadCloser, ce qui ne permet pas plusieurs lectures. Tenter de le décoder directement à l'aide de json.NewDecoder ou de context.Bind entraînera généralement des messages vides ou d'erreur en raison de la nature tampon du corps.

La solution de contournement : restaurer le corps

Heureusement, il existe une solution de contournement qui consiste à capturer le contenu du corps, à restaurer son état d'origine, puis à effectuer le processus de décodage. Ceci est réalisé en suivant les étapes suivantes :

  1. Lire le contenu du corps à l'aide de ioutil.ReadAll.
  2. Restaurer le io.ReadCloser à son état d'origine à l'aide de ioutil.NopCloser et d'un nouveau tampon avec le contenu capturé.
  3. Procédez à la logique de décodage, telle que la liaison à une structure.

Démonstration de code

Voici un exemple d'implémentation :

<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

En suivant ces étapes, vous pouvez capturer et décoder le corps JSON selon vos besoins dans votre application Go.

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