1. Pendahuluan
Artikel ini terutama memperkenalkan cara menggunakan layanan backend SpringMVC untuk mendukung beberapa jenis nilai pengembalian (XML, JSON, HTML, Excel) melalui konfigurasi.
Kode di sini menggunakan springboot, alamat unduh: https://github.com/xiagn825/springboot-todolist/tree/springboot-contentnegotiation
2. Konsep Dasar
2.1 Perbedaan antara tipe konten dan penerimaan pengaturan di httpheader
Terima: Format data yang akan dikembalikan ke klien oleh antarmuka
Curl --teader 'Accept: Application/JSON' http: // localhost: 8080/todo
Tipe Konten: Format data yang dikirim oleh klien ke server
Curl -x Put --Teader 'Konten -Type: Application/JSON' -D '{"title": "Weekend Jadwal", "Content": "Sleep"}' http: // localhost: 8080/todo2.2 Dua cara untuk menghasilkan output di SpringMVC
1) Ketika server menggunakan metode RESTful untuk hanya menyediakan data untuk AJAX klien atau permintaan server lainnya, @ResponseBody biasanya digunakan untuk mengidentifikasi pengembalian Anda. Pada saat ini, Spring menggunakan httpmessageConverter untuk memformat objek yang dikembalikan ke dalam format yang diperlukan.
2) Ketika Anda perlu memberikan lapisan presentasi (seperti HTML), SpringMVC menggunakan ViewResolver untuk memproses pengembalian Anda.
Terkadang aplikasi Anda harus memberikan keduanya
2.3 Penentuan Format Output SpringMVC
Sering kali, untuk mendukung banyak sistem atau beberapa terminal, Anda perlu mengeluarkan data yang sama dalam manifestasi yang berbeda.
SpringMVC menggunakan ContentNeGotationstrategy untuk menentukan format data apa yang diminta pengguna untuk diperoleh.
ContentNeGotationstrategy menggunakan tiga cara untuk mengidentifikasi jenis data apa yang ingin dikembalikan pengguna
Silakan lihat konfigurasi di bawah ini
@OverridEpublic void configureContentNeGotiation (contentNeGotiationConfigurer configure) {configurer.favorpathextension (false) .favorparameter (true) .parametername ("mediatype") .defaultContentTye (mediatype.application_json) .mmmmliatipe ("xmmmliatipe (mediatype.application_json). .mediatype ("html", mediatype.text_html) .mediatype ("json", mediatype.application_json);}Tambahkan konfigurasi di atas ke webmvcconfig dari proyek Anda, yang berarti menutup aturan akhiran URL, membuka aturan parameter permintaan dan mengatur parameter permintaan ke 'mediatype'. Format pengembalian default adalah JSON, dan juga mendukung pengembalian XML dan HTML.
Ketiga komponen ini adalah kunci untuk mengembalikan output dalam format yang berbeda
2.4 RequestMappings
2.4.1 RequestMappingHandlermapping
Apa yang biasanya kami gunakan di musim semi adalah requestmappingHandlermapping. Menurut RequestMappingInfo, kami memperbaiki kondisi pencocokan. Proses pencarian keseluruhan adalah sebagai berikut:
Antarmuka implementasi abstracthandlermethodmapping gethandlerinternal
1. Gunakan urlpathhelper untuk menemukan jalur yang sesuai dengan permintaan
2. Temukan handlermethod yang sesuai dengan jalur
2.1 Temukan Kondisi Pencocokan dari UrlMap RequestMappingInfo
2.2 Jika kondisi pencocokan ditemukan dalam nilai yang setara, tambahkan ke kondisi kecocokan
2.3 Jika tidak ada kondisi pencocokan yang ditemukan, gunakan RequestMappingInfo dari semua handlermethods untuk dicocokkan
2.4 Urutkan pertandingan, keluarkan pertandingan prioritas tertinggi, dan periksa apakah itu satu -satunya prioritas tertinggi
2.5: Encapsulate dua situasi di mana kondisinya cocok dan kondisinya tidak cocok.
3. Encapsulate Handlermethod Untuk memastikan bahwa contoh kacang disimpan dalam ContentNeGotiationManager, yang memberikan perbandingan kondisi kecocokan untuk Minitype, sehingga kerangka kerja dapat cocok dengan metode pemrosesan yang paling tepat.
2.5 httpmessageConverter
2.5.1 Konverter Pesan Default
SpringMVC akan memuat httpmessageConverters berikut secara default:
BytearrayhttpmessageConverter mengkonversi byte arrayStringHttpMessageConverter mengonversi stringsResourcehttpMessageConverter mengonversi org.springframework.core.io.Resource untuk jenis streaming Octet streamsourceHtpMessMesssager javax.xml.transform.sourceFormHttpMessageConverter mengkonversi data form ke/dari multivaluemap <string, string> .jaxb2rooteLementHttpMessageConverter mengonversi classpath) dari/dari xml (ditambahkan hanya jika jaxb2 hadir di cllasspath) mapkon (ditambahkan hanya jika jaxb2 hadir) pada classpath) dari xml (ditambahkan jika jaxb2 hadir) pada classpath) dari xml (ditambahkan jika jaxb2 hadir) pada classpath) dari xml (ditambahkan JAXB2) (Ditambahkan Hanya jika Jackson 2 hadir di ClassPath) MappingJacksonHttpMessageConverter mengonversi JSON (ditambahkan hanya jika Jackson hadir di classpath) REMEDHTTPMESSAGECONVERTER KONVERTS ATOM hanya rome convers roma pada classpath) rsschannelhte feed (ditambahkan jika roma hadir pada classpath) rsschannelhte feed (ditambahkan jika roma hadir pada classpath) rsschannelhte feedsPonperonnon converson di classpath)
Jika kita mengembalikannya diidentifikasi oleh @ResponseBody, kerangka kerja akan menggunakan httpmessageConverter untuk memproses nilai pengembalian. XmlCoverter default tidak terlalu berguna dan tergantung pada anotasi @xmlrootelement pada objek entitas. Itu tidak terlalu nyaman. Oleh karena itu, kami memperkenalkan pustaka kelas tambahan dan menyesuaikan MessageConverter sehingga objek yang dikembalikan dapat diproses langsung ke dalam format XML.
Lulusan perpustakaan impor
grup kompilasi: 'org.springframework', nama: 'spring-oxm', versi: '4.3.9.release'Compile grup:' com.thoughtworks.xstream ', nama:' xstream ', versi:' 1.4.10 '
Konfigurasi
@OverridEpublic void configureMessageConVerters (Daftar <httpmessageConverter <? >> Converters) {converters.add (createxmlhttpmessageConverter ()); super.configuremessageConverters (konverter);} private httpmessageConverter <Papen> createxmlhttpmessageConverter () {MarshallingHttpMessageConverter xmlconverter = new MarshallingHtpMessageConverter ();); XStreamMarshaller xStreamMarshaller = new XStreamMarShaller (); xmlconverter.setmarshaller (xstreammarshaller); xmlconverter.setunmarshaller (xstreammarshaller); kembalikan xmlconverter;}2.6 Lihat Resolusi
2.6.1 Render halaman (Freemarker)
Ketika Anda perlu kembali ke halaman, Anda perlu menggambar dengan viewResolver yang sesuai, dan di sini Anda menggunakan Freemarker sebagai mesin halaman.
Lulusan perpustakaan impor
compile ("org.springframework.boot: Spring-boot-starter-freemarker")Meringkaskan
Di atas adalah seluruh konten artikel ini. Saya berharap konten artikel ini memiliki nilai referensi tertentu untuk studi atau pekerjaan semua orang. Jika Anda memiliki pertanyaan, Anda dapat meninggalkan pesan untuk berkomunikasi. Terima kasih atas dukungan Anda ke wulin.com.