Maison >développement back-end >Golang >Comment gérer les corps de requête vides dans Gin/Golang ?

Comment gérer les corps de requête vides dans Gin/Golang ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-29 09:05:021016parcourir

How to Handle Empty Request Bodies in Gin/Golang?

Gestion du corps de requête vide dans Gin/Golang

Dans le processus de compréhension de Go et Gin, vous pourriez rencontrer un problème lors de la récupération du corps de la requête. Cet article approfondit le problème et propose une solution complète basée sur le contexte donné.

Le problème

Vous essayez de lire le corps de la requête à partir d'une requête POST externe, mais le résultat est cohérent affiche un corps vide.

La solution

Le problème survient lors de la tentative d'impression de la valeur de chaîne de c.Request.Body, qui est un type d'interface ReadCloser. Pour confirmer que le corps contient les données attendues, vous pouvez extraire sa valeur dans une chaîne et l'imprimer pour votre compréhension.

<code class="go">func events(c *gin.Context) {
    x, _ := ioutil.ReadAll(c.Request.Body)
    fmt.Printf("%s", string(x))
    c.JSON(http.StatusOK, c)
}</code>

Bien qu'informative, cette méthode n'est pas recommandée pour accéder au corps de la requête. Utilisez plutôt la fonction de liaison de Gin, qui simplifie le processus d'analyse pour vous.

<code class="go">type E struct {
    Events string
}

func events(c *gin.Context) {
    data := &E{}
    c.Bind(data)
    fmt.Println(data)
    c.JSON(http.StatusOK, c)
}</code>

Cette approche garantit que les données de la requête sont correctement traitées, empêchant l'épuisement du c.Request.Body et permettant à Gin de lire le corps efficacement.

Attention

Notez que la lecture du corps à l'aide de ioutil.ReadAll(c.Request.Body) épuisera le corps, le rendant indisponible pour que Gin puisse le lire.

<code class="go">func events(c *gin.Context) {
    x, _ := ioutil.ReadAll(c.Request.Body)
    fmt.Printf("%s", string(x))
    data := &E{}
    c.Bind(data) // data remains unchanged since c.Request.Body has been depleted.
    fmt.Println(data)
    c.JSON(http.StatusOK, c)
}</code>

De plus, la réponse JSON de ce point de terminaison peut afficher un Request.Body vide. En effet, la méthode JSON Marshalling ne peut pas sérialiser un ReadCloser, ce qui entraîne une représentation vide.

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