Apabila membangunkan API REST menggunakan Gin dan Go, adalah perkara biasa untuk menghadapi isu badan permintaan kosong. Di sini kami menyelidiki sebab di sebalik isu ini dan meneroka penyelesaian untuk menanganinya.
Apabila anda mencetak terus badan permintaan menggunakan fmt.Printf("%s" , c.Request.Body), anda tidak mengekstrak nilai badan sebenar. c.Request.Body ialah jenis ReadCloser, yang menjadikannya antara muka yang mewakili aliran data yang boleh dibaca dan boleh ditutup.
Untuk tujuan ujian , anda boleh membaca badan permintaan ke dalam rentetan dan mencetaknya:
<code class="go">x, _ := ioutil.ReadAll(c.Request.Body) fmt.Printf("%s", string(x))</code>
Nota: Kaedah ini hanya untuk tujuan pembelajaran dan demonstrasi. Ia bukan penyelesaian praktikal untuk menghuraikan badan permintaan.
Cara yang lebih mantap untuk mengakses badan permintaan adalah melalui ciri pengikatan Gin. Ini membolehkan anda menentukan struktur data yang akan dihuraikan dan diisi secara automatik daripada badan permintaan:
<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>
Dengan menggunakan kaedah Bind(), Gin akan mengisi struct E dengan data daripada badan permintaan , membolehkan anda mengakses parameter permintaan dengan mudah.
Adalah penting untuk mengelakkan membaca badan permintaan secara terus (menggunakan kaedah pertama) sebelum menggunakan mekanisme pengikatan Gin. Ini boleh menyebabkan konflik dan penghuraian yang salah.
Atas ialah kandungan terperinci Mengapa Badan Permintaan Kosong dalam API Gin/Go saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!