Spring 4 vs Jersey untuk layanan web REST

117

Kami berencana membuat aplikasi baru dengan versi pegas 4.0.6. Kami menggunakan pengontrol yang dapat mengembalikan "XML" atau "JSON". Dalam proyek sebelumnya kami telah berhasil mengimplementasikan Jersey dengan Spring untuk dukungan REST menggunakan JAX-RS API, tetapi setelah membaca beberapa artikel dan saran dari senior mereka mengatakan spring memberikan dukungan REST yang cukup bagus.

Beberapa poin yang membuat saya bingung jika saya menggunakan dukungan Spring REST tanpa menggunakan JAX-RS dan Jersey adalah:

  1. Bagaimana marshaling dan unmarshaling dilakukan di Spring MVC?

  2. Apakah perlu untuk marshaling atau unmarshaling perlu menggunakan jax-rs.

  3. Jika marshaling dan unmarshaling ditangani secara otomatis oleh spring, lalu bagaimana ia mengetahui tentang xmlRootElements.

Saya masih bingung jika Spring membuktikan dukungan yang sangat baik untuk REST lalu mengapa orang masih menggunakan Jersey untuk REST? Benar-benar ingin tahu lebih banyak detail.

Jika saya mengatakan sesuatu yang salah, silakan abaikan. Penjelasan dengan contoh sangat membantu.

Terima kasih sebelumnya!!

Robin Saxena
sumber

Jawaban:

119

Menurut saya, baik Jersey dan Spring MVC hebat - setiap proyek memiliki gaya dan kekuatannya sendiri. Bagaimanapun, Stack Overflow bukanlah tempat yang tepat untuk menanyakan perbandingan subjektif (pertanyaan Anda akan ditutup cukup cepat). Jika Anda sudah menggunakan Spring untuk yang lainnya dan tidak diharuskan menggunakan JAX-RS, maka Spring MVC sangat masuk akal.

Mengenai fitur seperti (un) marshalling, JAX-RS hanyalah sebuah spesifikasi - perpustakaan lain dapat menawarkan fitur serupa tanpa mengimplementasikan API yang sama.

  1. Alih-alih MessageBodyReaders / Writers, Spring MVC menggunakan HttpMessageConverters untuk menangani (tidak) menyusun resource REST. Spring MVC menangani negosiasi konten dan memilih konverter terbaik yang tersedia untuk pekerjaan tersebut (Anda dapat memberi anotasi metode untuk memberi petunjuk pada jenis media apa yang mereka produksi / konsumsi).

  2. Tidak, tidak perlu menggunakan JAX-RS untuk (menghapus) resource marshall. Faktanya, implementasi JAX-RS dan Spring MVC menggunakan library serialisasi pihak ketiga untuk melakukan pekerjaan tersebut; jadi tidak terikat pada standar tertentu.

  3. Dalam versi 4.0.6-nya, Spring mendukung banyak HttpMessageConverters , dengan Jackson untuk JSON, JAXB untuk XML dan banyak lainnya. Spring 4.1.0 menambahkan lebih banyak HttpMessageConverters :

Untuk menjawab poin terakhir Anda, @XmlRootElementadalah anotasi JAXB dan bukan bagian dari JAX-RS. Spring mendukung JAXB .

Untuk contoh yang lebih lengkap dengan REST di Musim Semi, lihat panduan memulai ini (Anda akan mendapatkan contoh lengkap yang berjalan dalam 10-15 menit).

Sekali lagi, bagian terakhir dari pertanyaan Anda cukup subjektif - ada banyak solusi populer untuk membangun layanan REST di JVM, bukan hanya Jersey dan Spring (Dropwizard, Play! Framework, dll).

Brian Clozel
sumber
2
Di mana Anda akan menyarankan seseorang mengajukan pertanyaan seperti ini?
swade
8
"pertanyaan Anda akan ditutup dengan cepat"! Tidak secepat itu :)
Afshin Moazami
6
Saya menyukai stackoverflow dan saya menyukai quora, saya tidak pernah menyukai kebijakan pertanyaan subjektif penutup ini dan saya tidak pernah berpikir untuk mengajukan pertanyaan teknis di quora
Kalpesh Soni
Satu pertanyaan singgung, Bisakah kita memiliki Jersey dan SpringRest di EAR yang sama, keduanya berjalan bersama untuk rangkaian layanan yang berbeda?
pramodc84
22

Dukungan AFAIK Spring REST didasarkan pada Spring MVC dan bukan implementasi JAX-RS sementara Jersey telah mengimplementasikan spesifikasi JAX-RS. Mereka yang memiliki Spring (Core, AOP atau MVC) dalam proyek mereka memilih dukungan Spring ReST melalui implementor JAX-RS.

Saya merekomendasikan Jersey karena sudah matang, mengimplementasikan JAX-RS dan mudah digunakan.

VGaur
sumber
1
Terima kasih atas balasannya, betapa marshaling dan unmarshaling dilakukan di musim semi tanpa menggunakan jax-rs.
Robin Saxena
ya, saya setuju dengan Anda. Spring Web MVC Rest tidak mudah digunakan. Ada banyak konfigurasi yang perlu Anda jaga.
Evan Hu
2
Jersey juga merupakan pilihan yang baik jika Anda menggunakan (atau ingin menggunakan) Spring boot. cf dokumentasi
herau
1
Anda dapat menggunakan pustaka Google GSON untuk marshaling dan unmarshaling. Ini mendukung generik Java dan objek khusus.
Tejzeratul