Spring 4 vs Jersey für REST-Webdienste

117

Wir planen eine neue Anwendung mit der Version Spring 4.0.6. Wir verwenden einen Controller, der "XML" oder "JSON" zurückgeben kann. Im vorherigen Projekt haben wir Jersey mit Spring for REST-Unterstützung mithilfe der JAX-RS-API erfolgreich implementiert, aber nachdem wir einige Artikel und Vorschläge von Senioren gelesen hatten, sagten sie, dass Spring eine ziemlich gute REST-Unterstützung bietet.

Einige der Punkte, die mich wirklich verwirrt haben, wenn ich Spring REST-Unterstützung ohne JAX-RS und Jersey verwende, sind:

  1. Wie wird Marshalling und Unmarshaling in Spring MVC durchgeführt?

  2. Ist es für das Marshalling oder Unmarshaling notwendig, Jax-Rs zu verwenden?

  3. Wenn Marshalling und Unmarshaling bis zum Frühjahr automatisch erledigt werden, woher weiß es dann über xmlRootElements.

Ich bin immer noch verwirrt, wenn der Frühling REST sehr gut unterstützt, warum gehen die Leute dann immer noch mit Jersey für REST? Ich bin wirklich auf der Suche nach mehr Details.

Wenn ich etwas Falsches gesagt habe, ignoriere es bitte. Erklärung mit Beispiel ist wirklich hilfreich.

Danke im Voraus!!

Robin Saxena
quelle

Antworten:

119

Ich würde sagen, dass sowohl Jersey als auch Spring MVC großartig sind - jedes Projekt hat seinen eigenen Stil und seine eigenen Stärken. Auf jeden Fall ist der Stapelüberlauf nicht der richtige Ort, um subjektive Vergleiche anzustellen (Ihre Frage würde ziemlich schnell geschlossen). Wenn Sie bereits Frühling verwenden für alles andere und sind nicht erforderlich zu verwenden , JAX-RS, dann macht Spring MVC total Sinn.

In Bezug auf Funktionen wie (Un-) Marshalling ist JAX-RS schließlich nur eine Spezifikation - andere Bibliotheken können ähnliche Funktionen anbieten, ohne dieselbe API zu implementieren.

  1. Anstelle von MessageBodyReaders / Writers verwendet Spring MVC HttpMessageConverters , um (un) Marshalling-REST-Ressourcen zu verarbeiten. Spring MVC übernimmt die Inhaltsverhandlung und wählt den besten verfügbaren Konverter für den Job aus (Sie können Methoden mit Anmerkungen versehen, um anzugeben, welchen Medientyp sie produzieren / verbrauchen).

  2. Nein, es ist nicht erforderlich, JAX-RS zu verwenden, um Marshall-Ressourcen (un) zu entfernen. Tatsächlich verwenden JAX-RS-Implementierungen und Spring MVC Serialisierungsbibliotheken von Drittanbietern, um die Aufgabe zu erledigen. Es ist also nicht an einen bestimmten Standard gebunden.

  3. In der Version 4.0.6 unterstützt Spring viele HttpMessageConverter , darunter Jackson für JSON, JAXB für XML und viele andere. Spring 4.1.0 hat weitere HttpMessageConverters hinzugefügt :

Um Ihren letzten Punkt zu beantworten, @XmlRootElementhandelt es sich um eine JAXB-Anmerkung, die nicht Teil von JAX-RS ist. Spring unterstützt JAXB .

Ein vollständigeres Beispiel für REST im Frühjahr finden Sie in dieser Anleitung für die ersten Schritte (ein vollständiges Beispiel wird in 10 bis 15 Minuten ausgeführt).

Auch hier ist der letzte Teil Ihrer Frage ziemlich subjektiv - es gibt viele beliebte Lösungen zum Erstellen von REST-Diensten in der JVM, nicht nur Jersey und Spring (Dropwizard, Play! Framework usw.).

Brian Clozel
quelle
2
Wo würden Sie jemandem vorschlagen, eine solche Frage zu stellen?
Swade
8
"Ihre Frage wäre ziemlich schnell geschlossen"! Nicht so schnell :)
Afshin Moazami
6
Ich habe Liebe Stackoverflow und ich liebe Quora, ich habe diese abschließende subjektive Frage Politik nie gemocht und ich habe nie darüber nachgedacht, technische Fragen in Quora zu stellen
Kalpesh Soni
Eine tangentiale Frage: Können wir sowohl Jersey als auch SpringRest in derselben EAR haben, die beide für verschiedene Services zusammen laufen?
Pramodc84
22

Die AFAIK Spring REST-Unterstützung basiert auf Spring MVC und seiner nicht JAX-RS-Implementierung, während Jersey die JAX-RS-Spezifikation implementiert hat. Diejenigen, die Spring (Core, AOP oder MVC) in ihrem Projekt haben, wählen die Spring ReST-Unterstützung gegenüber dem JAX-RS-Implementierer.

Ich empfehle Jersey als ausgereift, implementiert JAX-RS und ist einfach zu bedienen.

VGaur
quelle
1
Vielen Dank für die Antwort, wie das Marshalling und Unmarshaling im Frühjahr ohne Verwendung von Jax-Rs erfolgt.
Robin Saxena
Ja, ich stimme dir zu. Spring Web MVC Rest ist nicht so einfach zu bedienen. Es gibt viele Konfigurationen, auf die Sie achten müssen.
Evan Hu
2
Jersey ist auch eine gute Wahl, wenn Sie Spring Boot verwenden (oder verwenden möchten). cf Dokumentation
herau
1
Sie können die Google GSON- Bibliothek zum Marshalling und Unmarshaling verwenden. Es unterstützt Java-Generika und benutzerdefinierte Objekte.
Tejzeratul