Lors du développement d'API REST à l'aide de Gin and Go, il n'est pas rare de rencontrer un problème de corps de requête vide. Nous examinons ici les raisons de ce problème et explorons des solutions pour le résoudre.
Lorsque vous imprimez directement le corps de la demande à l'aide de fmt.Printf("%s" , c.Request.Body), vous n'extrayez pas la valeur réelle du corps. c.Request.Body est de type ReadCloser, ce qui en fait une interface représentant un flux de données lisible et fermable.
À des fins de test , vous pouvez lire le corps de la requête dans une chaîne et l'imprimer :
<code class="go">x, _ := ioutil.ReadAll(c.Request.Body) fmt.Printf("%s", string(x))</code>
Remarque : Cette méthode est uniquement à des fins d'apprentissage et de démonstration. Ce n'est pas une solution pratique pour analyser le corps de la requête.
Un moyen plus robuste d'accéder au corps de la requête consiste à utiliser la fonction de liaison de Gin. Cela vous permet de spécifier une structure de données qui sera automatiquement analysée et remplie à partir du corps de la requête :
<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>
En utilisant la méthode Bind(), Gin remplira la structure E avec les données du corps de la requête. , vous permettant d'accéder facilement aux paramètres de la requête.
Il est important d'éviter de lire directement le corps de la requête (en utilisant la première méthode) avant d'utiliser les mécanismes de liaison de Gin. Cela peut entraîner des conflits et une analyse incorrecte.
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!