Spring 4 vs Jersey pour les services Web REST

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é 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 le spring fournissait un support REST assez bon.

Certains des points qui m’ont vraiment troublé si j’utilise la prise en charge Spring REST sans utiliser JAX-RS et Jersey sont:

  1. Comment marshaling et unmarshaling 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 unmarshaling sont automatiquement gérés au spring, comment peut-on en savoir plus sur xmlRootElements.

Je suis toujours confus si Spring prouve un très bon soutien de REST alors pourquoi les gens vont-ils toujours avec Jersey pour REST? Vraiment chercher à en savoir plus dans les détails.

Si j’ai dit quelque chose de mal, ignorez-le. L’explication avec l’exemple est vraiment utile.

Merci d’avance!!

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 demander des comparaisons subjectives (votre question serait fermée assez rapidement). Si vous utilisez déjà Spring pour tout le rest et que vous n’êtes pas obligé d’utiliser JAX-RS, Spring MVC est parfaitement adapté.

En ce qui concerne les fonctionnalités telles que le (un) marshalling, JAX-RS n’est qu’une spécification après tout: les 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 le (dés) marshalling des ressources REST. Spring MVC gère la négociation de contenu et choisit le meilleur convertisseur disponible pour le travail (vous pouvez annoter des méthodes pour indiquer le type de média qu’ils produisent / utilisent).

  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. donc ce n’est pas lié à une norme particulière.

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

    • Jackson est maintenant disponible pour JSON et XML
    • Google Protobuf
    • Gson for JSON , comme alternative à Jackson

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

Pour un exemple plus complet avec REST au spring, 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.).

La prise en charge d’AFAIK Spring REST est basée sur Spring MVC et sur son implémentation non JAX-RS, tandis que Jersey a implémenté la spécification JAX-RS. Les utilisateurs de Spring (Core, AOP ou MVC) dans leur projet choisissent la prise en charge de Spring ReST sur les implémenteurs JAX-RS.

Je recommande Jersey comme sa maturité, implémente JAX-RS et est facile à utiliser.