1. Deskripsi Masalah:
Dalam program web SprinVMVC, saya mengirim permintaan posting Ajax di halaman, dan kemudian menggunakan @RequestBody untuk menerima parameter di badan permintaan di server. Selama menjalankan, saya ingin server mengirim permintaan AJAX. Browser menyimpan umpan balik 415 jenis media yang tidak didukung atau kode status 400, berpikir bahwa ada sesuatu yang salah dengan penulisan Ajax. Setelah mencari informasi untuk waktu yang lama, saya menemukan bahwa ada sesuatu yang hilang dalam konfigurasi file spring-mvc.config. Tentu saja, mungkin juga Anda benar-benar kehilangan pengaturan parameter tipe konten di AJAX. Setelah analisis, saya harus memiliki masalah dengan konfigurasi file springmvc-config.xml.
(Catatan): 400: (Permintaan Kesalahan) Server tidak memahami sintaks permintaan. 415: (Jenis media yang tidak didukung) Format yang diminta tidak didukung oleh halaman yang diminta.
2. Solusi:
Dalam file springmvc-config.xml, konverter informasi permintaan stringhttpmessageConverter ditambahkan, dan fragmen konfigurasi adalah sebagai berikut:
<! --- StringHttpMessageConverter bean-> <bean id = "stringHttpMessageConverter" class = "org.springframework.http.converter.stringhttpmessageConverter"/> <! = "org.springframework.web.servlet.mvc.annotation.annotationMethodHandlerAdapter"> <name properti = "MessageConVerters"> <cist> <Ref bean = "mappingjacksonHtpMessageConverter" /<!-New StringMessageConVerter "—" string BeanPonVeConVerter " <Ref bean = "jsonhttpmessageConverter"/> <ref bean = "formhttpmessageConverter"/> </list> </propert> </tact>
3. Pengantar Konverter Informasi Permintaan HTTPMessageConverter:
Antarmuka HTTPMessageConverter menentukan konverter yang dapat mengonversi informasi permintaan HTTP dan informasi respons HTTP dalam format. Biasanya ada konverter berikut yang mengimplementasikan antarmuka httpmessageConverter:
BYTEARRAYHTTPMESSAGECONVERTER: Bertanggung jawab untuk membaca data format biner dan menulis data format biner;
StringHtTPMessageConverter: Bertanggung jawab untuk membaca data format string dan menulis data format biner;
ResourceHTTPMessageConverter: Bertanggung jawab untuk membaca file sumber daya dan menulis data file sumber daya;
FormHTTPMessageConverter: Bertanggung jawab untuk membaca data yang dikirimkan berdasarkan formulir (format data yang dapat dibaca adalah aplikasi/X-WWW-form-urlencoded, dan tidak dapat membaca data format multipart/format-data); bertanggung jawab untuk menulis data dalam aplikasi/X-www-from-urlencoded dan format multipart/form-data;
MappingjacksonhttpMessageConverter: bertanggung jawab untuk membaca dan menulis data dalam format JSON;
SourceHTTPMessageConverter: Bertanggung jawab untuk membaca dan menulis data yang ditentukan oleh javax.xml.transform.source dalam XML;
JAXB2ROOTElEMENTHTTPMESSAGECONVERTER: Bertanggung jawab untuk membaca dan menulis data dalam format tag XML;
AtomfeedHttpMessageConverter: bertanggung jawab untuk membaca dan menulis data dalam format atom;
RsschannelhttpmessageConverter: bertanggung jawab untuk membaca dan menulis data dalam format RSS;
Untuk informasi lebih lanjut tentang httpmessageConverter, silakan lihat:
http://docs.spring.io/spring/docs/3.0.x/api/org/springframework/http/converter/httpmessageConverter.html
4.HTTPMESSAGECONVERTER INFORMASI INFORMASI PROSES EKSEKUSI KONVERTER:
Ketika pengguna mengirimkan permintaan, anotasi @RequestBody akan membaca data di badan permintaan. Konverter permintaan default HTTPMessageConverter mengonfirmasi format data dari header permintaan dengan mendapatkan tipe konten di header permintaan, sehingga mengadaptasi konverter yang sesuai dengan data permintaan. Misalnya, ContentType: Applicatin/JSON, konverter akan diadaptasi untuk MappingJacksonHttpMessageConverter. Demikian pula, anotasi @ResponseBody akan memungkinkan httpmessageConverter untuk mendeteksi properti menerima di header untuk mengadaptasi konverter respons.
Meringkaskan:
Saat menggunakan SpringMVC untuk penerimaan data server, terutama saat membuat permintaan AJAX, beri perhatian khusus pada pengaturan atribut ContentType dan terima atribut, dan konfigurasikan konverter yang sesuai di springmvc-config.xml. Saat kami menggunakan SpringMVC untuk membuat permintaan AJAX, beberapa metode menggunakan metode respons.getWriter (). Print (). Metode lain yang lebih baik adalah menambahkan anotasi @ResponseBody untuk secara langsung mengembalikan data jenis peta, dan konverter secara otomatis mengonversinya ke tipe data JSON.