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é.
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.
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.
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!