REST web hizmetleri için Spring 4 vs Jersey


117

Yay 4.0.6 versiyonu ile yeni bir uygulama yapmayı planlıyoruz. "XML" veya "JSON" döndürebilen denetleyici kullanıyoruz. Bir önceki projede Jersey ile Spring for REST desteğini JAX-RS API kullanarak başarıyla uyguladık, ancak yaşlılardan birkaç makale ve öneriyi okuduktan sonra baharın oldukça iyi bir REST desteği sağladığını söylediler.

Spring REST desteğini JAX-RS ve Jersey kullanmadan kullanırsam kafamı gerçekten karıştıran noktalardan bazıları şunlardır:

  1. Spring MVC'de sıralama ve unmarshaling nasıl yapılır?

  2. Jax-rs kullanmak için sıralama veya unmarshaling gerekir mi?

  3. Sıralama ve geri gönderme otomatik olarak Spring tarafından yapılırsa, xmlRootElements hakkında nasıl bilgi sahibi olur?

Bahar, REST'e çok iyi destek sağlıyorsa, o zaman neden insanlar REST için hala Jersey ile gidiyor? Gerçekten ayrıntılı olarak daha fazlasını öğrenmek istiyorum.

Yanlış bir şey söylediysem, lütfen dikkate almayın. Örnekle açıklama gerçekten yardımcı olur.

Şimdiden teşekkürler!!

Yanıtlar:


119

Hem Jersey hem de Spring MVC'nin harika olduğunu söyleyebilirim - her projenin kendi tarzı ve güçlü yönleri vardır. Her neyse, Stack Overflow öznel karşılaştırmalar sormak için doğru yer değil (sorunuz oldukça hızlı kapanacaktır). Zaten Spring'i her şey için kullanıyorsanız ve gerekli değilse için kullanıyorsanız ve JAX-RS kullanmanız , Spring MVC tamamen mantıklıdır.

Sıralama (un) marshalling gibi özelliklerle ilgili olarak, JAX-RS sadece bir özelliktir - diğer kitaplıklar aynı API'yi uygulamadan benzer özellikler sunabilir.

  1. MessageBodyReaders / Writers yerine Spring MVC, REST kaynaklarını sıralamak (un) için HttpMessageConverters kullanıyor . Spring MVC, içerik pazarlığını yönetir ve iş için mevcut en iyi dönüştürücüyü seçer (ürettikleri / tükettikleri medya türüne ipucu vermek için yöntemlere açıklama ekleyebilirsiniz).

  2. Hayır, kaynakları sıralamak (kaldırmak) için JAX-RS kullanmak gerekli değildir. Aslında, JAX-RS uygulamaları ve Spring MVC, işi yapmak için üçüncü taraf serileştirme kitaplıklarını kullanır; yani belirli bir standarda bağlı değildir.

  3. Spring, 4.0.6 sürümünde, JSON için Jackson, XML için JAXB ve diğerleri ile birçok HttpMessageConverters'ı destekler . Bahar 4.1.0 daha fazla HttpMessageConverters ekledi :

Son noktanızı yanıtlamak için @XmlRootElement, bir JAXB notudur ve JAX-RS'nin bir parçası değildir. Yay, JAXB'yi destekler .

İlkbaharda REST ile daha eksiksiz bir örnek için, bu başlangıç ​​kılavuzuna göz atın (10-15 dakika içinde çalışan eksiksiz bir örnek alacaksınız).

Yine sorunuzun son kısmı oldukça özneldir - JVM'de sadece Jersey ve Spring değil (Dropwizard, Play! Framework, vb.) REST hizmetleri oluşturmak için birçok popüler çözüm vardır.


2
Birinin böyle bir soru sormasını nerede önerirsiniz?
swade

8
"sorunuz oldukça hızlı kapanacaktır"! O kadar hızlı değil :)
Afshin Moazami

6
Love stackoverflow var ve quora seviyorum, bu kapanış öznel soru politikasını hiç
beğenmedim

Teğet bir soru, Jersey ve SpringRest'i aynı EAR'de, her ikisi de farklı hizmetler için birlikte çalışabilir miyiz?
pramodc84

22

AFAIK Spring REST desteği, Spring MVC'ye dayalıdır ve JAX-RS uygulamasına dayanmazken Jersey, JAX-RS spesifikasyonunu uygulamıştır. Projesinde Spring (Core, AOP veya MVC) bulunanlar, JAX-RS uygulayıcı yerine Spring ReST desteğini seçerler.

Jersey'i olgun, JAX-RS uygulayan ve kullanımı kolay olduğu için tavsiye ederim.


1
Cevabınız için teşekkürler, jax-rs kullanmadan baharda nasıl sıralamak ve unmarshaling yapılır.
Robin Saxena

Evet seninle aynı fikirdeyim. Spring Web MVC Rest'in kullanımı o kadar kolay değil. Dikkat etmeniz gereken birçok konfigürasyon var.
Evan Hu

2
Spring boot kullanıyorsanız (veya kullanmak istiyorsanız) Jersey de iyi bir seçimdir. cf belgeleri
herau

1
Sıralamak ve dağıtmak için Google GSON kitaplığını kullanabilirsiniz . Java jeneriklerini ve özel nesneleri destekler.
Tejzeratul
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.