Maison  >  Article  >  développement back-end  >  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
Susan Sarandonoriginal
2024-11-02 14:39:30911parcourir

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, comme la liaison à un struct.

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>

En suivant ces étapes, vous pouvez capturer et décoder le Corps JSON selon les 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!

Déclaration:
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