Menangkap JSON daripada Badan Permintaan dalam Go
Apabila membangunkan API, selalunya perlu untuk menangkap badan JSON mentah permintaan POST. Dalam Node.js, tugas ini adalah mudah dengan sifat request.payload. Walau bagaimanapun, dalam Go, pendekatan pada mulanya mungkin kurang jelas.
Cabaran
Isi JSON disimpan dalam jenis io.ReadCloser, yang tidak membenarkan berbilang bacaan. Percubaan untuk menyahkodnya terus menggunakan json.NewDecoder atau context.Bind biasanya akan menghasilkan mesej kosong atau ralat disebabkan oleh sifat penimbal badan.
Penyelesaian: Memulihkan Badan
Nasib baik, terdapat penyelesaian yang melibatkan menangkap kandungan badan, memulihkan keadaan asalnya, dan kemudian melakukan proses penyahkodan. Ini dicapai menggunakan langkah berikut:
Demonstrasi Kod
Berikut ialah contoh pelaksanaan:
<code class="go">// Read the Body content var bodyBytes []byte if context.Request().Body != nil { bodyBytes, _ = ioutil.ReadAll(context.Request().Body) } // Restore the io.ReadCloser to its original state context.Request().Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytes)) // Continue to use the Body, like Binding it to a struct: order := new(models.GeaOrder) error := context.Bind(order)</code>
Dengan mengikuti langkah ini, anda boleh menangkap dan menyahkod Badan JSON seperti yang diperlukan dalam aplikasi Go anda.
Atas ialah kandungan terperinci Bagaimana untuk Menangkap dan Menyahkod Badan Permintaan JSON dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!