使用 Gin 和 Go 開發 REST API 時,遇到空白請求正文問題並不罕見。以下我們深入探討這個問題背後的原因並探討解決方案。
當您使用 fmt.Printf("%s" 直接列印請求正文時,c.Request.Body),您沒有提取實際的正文值。 c.Request.Body 的類型為 ReadCloser,這使其成為表示可讀且可關閉的資料流的介面。
用於測試目的,您可以將請求正文讀入字串並列印出來:
<code class="go">x, _ := ioutil.ReadAll(c.Request.Body) fmt.Printf("%s", string(x))</code>
注意:此方法僅用於學習和演示目的。這不是解析請求體的實用解決方案。
存取請求體的更穩健的方法是透過 Gin 的綁定功能。這允許您指定將自動解析並從請求正文填充的資料結構:
<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>
透過使用Bind() 方法,Gin 將使用請求正文中的資料填充E 結構,讓您可以輕鬆存取請求參數。
在使用 Gin 的綁定機制之前,避免直接讀取請求正文(使用第一種方法)非常重要。這可能會導致衝突和錯誤的解析。
以上是為什麼我的 Gin/Go API 中的請求正文為空?的詳細內容。更多資訊請關注PHP中文網其他相關文章!