Spring 4 vs Jersey pour les services Web REST

117

Nous prévoyons de créer une nouvelle application avec la version Spring 4.0.6. Nous utilisons un contrôleur qui peut renvoyer "XML" ou "JSON". Dans le projet précédent, nous avons implémenté avec succès Jersey avec Spring pour le support REST à l'aide de l'API JAX-RS, mais après avoir lu quelques articles et suggestions de personnes âgées, ils ont déclaré que Spring fournissait un très bon support REST.

Certains des points qui m'ont vraiment dérouté si j'utilise le support Spring REST sans utiliser JAX-RS et Jersey sont:

  1. Comment le marshaling et le démarshaling sont-ils effectués dans Spring MVC?

  2. Est-il nécessaire pour marshaling ou unmarshaling besoin d'utiliser jax-rs.

  3. Si le marshaling et le démarshaling sont automatiquement gérés par spring, comment connaît-il xmlRootElements.

Je suis toujours confus si Spring prouve un très bon support de REST, alors pourquoi les gens optent-ils toujours pour Jersey pour REST? Je cherche vraiment à en savoir plus dans les détails.

Si j'ai dit quelque chose de mal, veuillez l'ignorer. L'explication avec l'exemple est vraiment utile.

Merci d'avance!!

Robin Saxena
la source

Réponses:

119

Je dirais que Jersey et Spring MVC sont excellents - chaque projet a son propre style et ses propres forces. Quoi qu'il en soit, Stack Overflow n'est pas le bon endroit pour poser des comparaisons subjectives (votre question serait fermée assez rapidement). Si vous utilisez déjà Spring pour tout le reste et que vous n'êtes pas obligé d'utiliser JAX-RS, Spring MVC est tout à fait logique.

En ce qui concerne les fonctionnalités telles que le (dé) marshalling, JAX-RS n'est qu'une spécification après tout - d'autres bibliothèques peuvent offrir des fonctionnalités similaires sans implémenter la même API.

  1. Au lieu de MessageBodyReaders / Writers, Spring MVC utilise HttpMessageConverters pour gérer ( dé) marshaler les ressources REST. Spring MVC gère la négociation de contenu et choisit le meilleur convertisseur disponible pour le travail (vous pouvez annoter les méthodes pour indiquer le type de média qu'elles produisent / consomment).

  2. Non, il n'est pas nécessaire d'utiliser JAX-RS pour (dé) marshaller les ressources. En fait, les implémentations JAX-RS et Spring MVC utilisent des bibliothèques de sérialisation tierces pour faire le travail; ce n'est donc pas lié à une norme particulière.

  3. Dans sa version 4.0.6, Spring prend en charge de nombreux HttpMessageConverters , avec Jackson pour JSON, JAXB pour XML et bien d'autres. Spring 4.1.0 a ajouté plus de HttpMessageConverters :

Pour répondre à votre dernier point, @XmlRootElementest une annotation JAXB et ne fait pas partie de JAX-RS. Spring prend en charge JAXB .

Pour un exemple plus complet avec REST au printemps, consultez ce guide de démarrage (vous obtiendrez un exemple complet en 10 à 15 minutes).

Encore une fois, la dernière partie de votre question est assez subjective - il existe de nombreuses solutions populaires pour créer des services REST dans la JVM, pas seulement Jersey et Spring (Dropwizard, Play! Framework, etc.).

Brian Clozel
la source
2
Où suggéreriez-vous à quelqu'un de poser une telle question?
swade le
8
"votre question serait close assez rapidement"! Pas si vite :)
Afshin Moazami
6
J'ai l'amour stackoverflow et j'adore quora, je n'ai jamais aimé cette politique de clôture des questions subjectives et je n'ai jamais pensé à poser des questions techniques dans quora
Kalpesh Soni
Une question tangente, pouvons-nous avoir à la fois Jersey et SpringRest dans le même EAR, tous deux fonctionnant ensemble pour différents ensembles de services?
pramodc84
22

La prise en charge d'AFAIK Spring REST est basée sur Spring MVC et son implémentation non JAX-RS, tandis que Jersey a implémenté la spécification JAX-RS. Ceux qui ont Spring (Core, AOP ou MVC) dans leur projet choisissent le support Spring ReST plutôt que l'implémenteur JAX-RS.

Je recommande Jersey car il est mature, implémente JAX-RS et est facile à utiliser.

VGaur
la source
1
Merci pour la réponse, comment marshaling et démarshaling fait au printemps sans utiliser jax-rs.
Robin Saxena du
Oui je suis d'accord avec toi. Spring Web MVC Rest n'est pas si simple à utiliser. Il existe de nombreuses configurations dont vous devez faire attention.
Evan Hu
2
Le maillot est également un bon choix si vous utilisez (ou souhaitez utiliser) une botte à ressort. cf documentation
herau
1
Vous pouvez utiliser la bibliothèque Google GSON pour le marshaling et le démarshaling. Il prend en charge les génériques Java et les objets personnalisés.
Tejzeratul