Gin/Golang में खाली अनुरोध निकाय
Gin के साथ POST अनुरोधों को संभालते समय, आपको कभी-कभी एक समस्या का सामना करना पड़ सकता है जहां अनुरोध निकाय प्रकट होता है खाली रहो. यह निराशाजनक हो सकता है, खासकर यदि आप क्लाइंट से डेटा प्राप्त करने की उम्मीद करते हैं। इस समस्या का एक सामान्य कारण मुख्य भाग को सीधे प्रिंट करने का प्रयास करना है।
Gin एक इंटरफ़ेस प्रकार ReadCloser के रूप में अनुरोध निकाय का प्रतिनिधित्व करता है। हालाँकि, इस इंटरफ़ेस के स्ट्रिंग मान को प्रिंट करने से वास्तविक मुख्य सामग्री का पता नहीं चलेगा।
समाधान 1: स्ट्रिंग को पढ़ना और प्रिंट करना
केवल प्रदर्शन उद्देश्यों के लिए, आप मैन्युअल रूप से कर सकते हैं मुख्य भाग को एक स्ट्रिंग में पढ़ें और फिर उसे प्रिंट करें:
func events(c *gin.Context) {
x, _ := ioutil.ReadAll(c.Request.Body)
fmt.Printf("%s", string(x))
c.JSON(http.StatusOK, c)
}
हालांकि, यह अनुशंसित दृष्टिकोण नहीं है क्योंकि यह शरीर की सामग्री का उपभोग करता है।
समाधान 2: बाइंडिंग का उपयोग करना
पहुंचने का पसंदीदा तरीका जिन में अनुरोध निकाय बाइंडिंग का उपयोग करना है। 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