web-dev-qa-db-fra.com

Spring 4 vs Jersey pour REST services Web

Nous prévoyons de créer une nouvelle application avec la version printemps 4.0.6. Nous utilisons un contrôleur pouvant renvoyer "XML" ou "JSON". Dans le projet précédent, nous avons implémenté avec succès Spring avec Spring pour le support de REST à l'aide de l'API JAX-RS, mais après avoir lu quelques articles et suggestions d'aînés, ils ont déclaré que le printemps fournissait de très bons résultats REST soutien.

Certains des points qui m'ont vraiment dérouté si j'utilise Spring REST sans l'aide de JAX-RS et de Jersey sont les suivants:

  1. Comment le marshaling et le minimarhaling se font-ils dans Spring MVC?

  2. Est-il nécessaire pour utiliser le jax-rs de marshaler ou de minimiser la mort.

  3. Si le marshaling et le minimarhaling sont automatiquement gérés avant le printemps, comment le système connaît-il xmlRootElements?.

Je suis toujours perplexe si Spring est un très bon support de REST alors pourquoi les gens continuent-ils à utiliser Jersey pour se reposer? Je cherche vraiment à en savoir plus dans les détails.

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

Merci d'avance!!

116
Robin Saxena

Je dirais que Jersey et Spring MVC sont tous les deux excellents. Chaque projet a son propre style et ses propres atouts. Quoi qu'il en soit, Stack Overflow n'est pas le bon endroit pour demander des comparaisons subjectives (votre question serait résolue assez rapidement). Si vous utilisez déjà Spring pour tout le reste et que vous n'êtes pas requis pour utiliser JAX-RS, alors Spring MVC est tout à fait sensé.

En ce qui concerne des fonctionnalités telles que le (dé) marshalling, JAX-RS n’est qu’une spécification - d’autres bibliothèques peuvent proposer 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é) marshaller les 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 support 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 effectuer 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 HttpMessageConverters , avec Jackson pour JSON, JAXB pour XML et bien d’autres. Spring 4.1.0 a ajouté plus (HttpMessageConverters :

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

Pour un exemple plus complet avec REST au printemps, consultez ce guide de démarrage (vous obtiendrez un exemple complet s'exécutant dans 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 machine virtuelle, pas seulement Jersey et Spring (Dropwizard, Play! Framework, etc.).

119
Brian Clozel

Le support AFAIK Spring REST est basé sur Spring MVC et son implémentation n'est pas JAX-RS alors 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 par rapport au réalisateur JAX-RS.

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

22
VGaur