Artikel ini terutama mempelajari konten yang relevan tentang penggunaan @Requestbody yang benar, sebagai berikut.
Baru -baru ini, saya mengambil alih pekerjaan dengan seorang kolega yang akan pergi. Proyek yang saya ambil alih dibangun dengan Springboot. Saya melihat metode penulisan ini:
@RequestMapping ("Dothis") Public String Dothis (permintaan httpservletRequest, @RequestParam ("id") ID panjang, // ID pengguna @requestparam ("back_url") string back_url, // callback address @requestbody testentity json_data data json/json, untuk json {{json {{{{{JSON/JSOV/JSOVE COLPUESTBODYIni adalah metode pemetaan permintaan, dan kemudian masukkan URL dengan browser: http://127.0.0.1:8080/test/dothis?id=1&back_url=url&json_data= {"code":2 ,"message":"test "}}
Dalam metode ini, gunakan @RequestParam untuk mendapatkan parameter, dan kemudian gunakan @RequestBody untuk mengonversi parameter dalam format JSON ke jenis Java
Saat berjalan, kesalahan ditemukan: Badan permintaan yang diperlukan tidak ada
@RequestBody mensyaratkan penggunaan MappingJackson2httpMessageConverter untuk memuat, tetapi dokumentasi resmi Springboot menyebutkan bahwa ini sudah dimuat secara default, dan tidak ada kesalahan dalam menulis string JSON dan JavaBeans.
Oleh karena itu, mengingat bahwa itu harus menjadi masalah meminta tipe konten, karena tidak ada cara untuk mendefinisikan tipe konten dengan menggunakan browser untuk memasukkan URL, Spring tidak dapat menemukan badan permintaan
Untuk mengonfirmasi ide ini, tulis kelas permintaan sendiri:
String add_url = "http://127.0.0.1:8080/test/dothis"; Url url = url baru (add_url); HttpurlConnection connection = (httpurlConnection) url.openconnection (); Connection.setDoInput (true); Connection.setDoOutput (true); Connection.setRequestMethod ("Post"); Connection.setusecaches (false); connection.setInstanceFollowRedirects (true); connection.setRequestProperty ("tipe konten", "aplikasi/json"); connection.connect (); DataOutputStream out = DataOutputStream baru (Connection.GetOutputStream ()); JsonObject obj = new jsonObject (); obj.put ("kode", -1002); obj.put ("pesan", "msg"); out.writebytes (obj.tostring ()); out.flush (); out.close ();Permintaan masih gagal. Setelah debugging, saya menemukan bahwa semua anotasi @RequestParam perlu dihapus untuk berhasil.
Meringkaskan
1. @RequestBody perlu menguraikan semua parameter permintaan sebagai JSON. Oleh karena itu, nilai kunci = tidak dapat dimasukkan dalam URL permintaan. Semua parameter permintaan adalah JSON
2. Saat memasuki URL langsung melalui browser, @RequestBody tidak bisa mendapatkan objek JSON. Anda perlu menggunakan pemrograman Java atau permintaan metode berbasis AJAX, dan mengatur tipe konten ke Application/JSON
Di atas adalah semua tentang menafsirkan penggunaan @RequestBody yang benar, dan saya harap ini akan membantu semua orang. Teman yang tertarik dapat terus merujuk ke topik terkait lainnya di situs ini. Jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya. Terima kasih teman atas dukungan Anda untuk situs ini!