Gin/Golang 中請求正文為空
使用Gin 處理POST 請求時,偶爾可能會遇到請求正文顯示為空的問題是空的。這可能會令人沮喪,尤其是當您希望從客戶端接收資料時。此問題的一個常見原因是嘗試直接列印正文。
Gin 將請求內文表示為介面類型 ReadCloser。但列印該介面的字串值並不會洩漏實際的body內容。
方案一:讀取並列印字串
僅供演示,您可以手動將正文讀入字串,然後列印它:
func events(c *gin.Context) {
x, _ := ioutil.ReadAll(c.Request.Body)
fmt.Printf("%s", string(x))
c.JSON(http.StatusOK, c)
}
但是,這不是建議的方法,因為它會消耗正文內容。
解決方案 2:使用 Bindings
存取的首選方式Gin 中的請求主體是使用綁定。 Gin 提供了常見資料格式(例如 JSON)的內建綁定。透過定義一個結構體來表示期望的數據,然後使用 c.Bind,您可以自動解析主體並將其綁定到您的結構體:
type E struct {
Events string
}
func events(c *gin.Context) {
data := &E{}
c.Bind(data)
fmt.Println(data)
c.JSON(http.StatusOK, c)
}
此方法可確保請求正文被正確解析並透過您定義的結構體進行存取。
附加說明
之前手動讀取請求正文將其綁定到結構將消耗主體內容。這意味著對 c.Bind 的後續呼叫將會失敗。因此,僅使用字串讀取技術用於調試目的(不建議)或使用綁定以一致的方式存取主體非常重要。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3