Corps de requête vide dans Gin/Golang
Lors du traitement des requêtes POST avec Gin, vous pouvez occasionnellement rencontrer un problème où le corps de la requête semble être vide. Cela peut être frustrant, surtout si vous vous attendez à recevoir des données du client. Une raison courante de ce problème est la tentative d'imprimer le corps directement.
Gin représente le corps de la requête sous la forme d'un type d'interface ReadCloser. Cependant, l'impression de la valeur de chaîne de cette interface ne révélera pas le contenu réel du corps.
Solution 1 : Lecture et impression de la chaîne
À des fins de démonstration uniquement, vous pouvez manuellement lisez le corps dans une chaîne, puis imprimez-le :
<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>
Cependant, ce n'est pas l'approche recommandée car elle consomme le contenu du corps.
Solution 2 : Utiliser des liaisons
La meilleure façon d'accéder au corps de la requête dans Gin est d'utiliser des liaisons. Gin fournit des liaisons intégrées pour les formats de données courants tels que JSON. En définissant une structure pour représenter les données attendues, puis en utilisant c.Bind, vous pouvez automatiquement analyser et lier le corps à votre structure :
<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 le corps de la requête est analysé correctement et accessible via votre structure définie.
Remarque supplémentaire
La lecture manuelle du corps de la requête avant de la lier à une structure consommera le contenu du corps. Cela signifie que les appels ultérieurs à c.Bind échoueront. Par conséquent, il est important d'utiliser soit la technique de lecture de chaîne à des fins de débogage uniquement (non recommandé), soit d'utiliser des liaisons pour accéder au corps de manière cohérente.
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!