نص الطلب فارغ في Gin / Golang
عند التعامل مع طلبات POST مع Gin، قد تواجه أحيانًا مشكلة حيث يظهر نص الطلب تكون فارغة. قد يكون هذا الأمر محبطًا، خاصة إذا كنت تتوقع تلقي بيانات من العميل. أحد الأسباب الشائعة لهذه المشكلة هو محاولة طباعة النص مباشرةً.
يمثل Gin نص الطلب كنوع واجهة ReadCloser. ومع ذلك، فإن طباعة قيمة السلسلة لهذه الواجهة لن تكشف عن محتوى النص الفعلي.الحل 1: قراءة وطباعة السلسلة
لأغراض العرض التوضيحي فقط، يمكنك ذلك يدويًا اقرأ النص في سلسلة ثم اطبعه:
func events(c *gin.Context) { x, _ := ioutil.ReadAll(c.Request.Body) fmt.Printf("%s"، السلسلة(x)) ج.JSON(http.StatusOK, ج)func events(c *gin.Context) {
x, _ := ioutil.ReadAll(c.Request.Body)
fmt.Printf("%s", string(x))
c.JSON(http.StatusOK, c)
}
الحل 2: استخدام الروابط
الطريقة المفضلة للوصول نص الطلب في Gin هو استخدام الارتباطات. يوفر Gin روابط مضمنة لتنسيقات البيانات الشائعة مثل JSON. من خلال تحديد بنية لتمثيل البيانات المتوقعة ثم استخدام c.Bind، يمكنك تحليل النص وربطه تلقائيًا بالبنية الخاصة بك:
type E struct { سلسلة الأحداث } أحداث func(c *gin.Context) { البيانات :=&E{} ج.ربط (بيانات) FMT.Println (البيانات) ج.JSON(http.StatusOK, ج)
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