Spring 4 vs Jersey per i servizi web REST


117

Stiamo progettando di realizzare una nuova applicazione con la versione Spring 4.0.6. Utilizziamo un controller che può restituire "XML" o "JSON". Nel progetto precedente abbiamo implementato con successo Jersey con Spring per il supporto REST utilizzando l'API JAX-RS, ma dopo aver letto alcuni articoli e suggerimenti dagli anziani hanno affermato che la primavera fornisce un supporto REST piuttosto buono.

Alcuni dei punti che mi hanno davvero confuso se utilizzo il supporto Spring REST senza usare JAX-RS e Jersey sono:

  1. Come sono stati eseguiti il ​​marshalling e l'unmarshaling in Spring MVC?

  2. È necessario per il marshalling o unmarshaling è necessario utilizzare jax-rs.

  3. Se il marshalling e l'unmarshaling vengono gestiti automaticamente entro la primavera, allora come fa a conoscere xmlRootElements.

Sono ancora confuso se la primavera sta dimostrando un ottimo supporto di REST, allora perché le persone continuano a scegliere Jersey per REST? Sto davvero cercando di saperne di più nei dettagli.

Se ho detto qualcosa di sbagliato, per favore ignoralo. La spiegazione con l'esempio è davvero utile.

Grazie in anticipo!!

Risposte:


119

Direi che sia Jersey che Spring MVC sono fantastici: ogni progetto ha il suo stile e i suoi punti di forza. Comunque, Stack Overflow non è il posto giusto per chiedere confronti soggettivi (la tua domanda verrebbe chiusa abbastanza rapidamente). Se stai già utilizzando Spring per tutto il resto e non ti viene richiesto di utilizzare JAX-RS, Spring MVC ha perfettamente senso.

Per quanto riguarda funzionalità come il (un) marshalling, JAX-RS è solo una specifica dopo tutto: altre librerie possono offrire funzionalità simili senza implementare la stessa API.

  1. Invece di MessageBodyReaders / Writers, Spring MVC usa HttpMessageConverters per gestire il marshalling delle risorse REST. Spring MVC gestisce la negoziazione del contenuto e sceglie il miglior convertitore disponibile per il lavoro (è possibile annotare i metodi per suggerire il tipo di supporto che producono / consumano).

  2. No, non è necessario utilizzare JAX-RS per (dis) marshalling delle risorse. In effetti, le implementazioni JAX-RS e Spring MVC utilizzano librerie di serializzazione di terze parti per svolgere il lavoro; quindi non è legato a uno standard particolare.

  3. Nella sua versione 4.0.6, Spring supporta molti HttpMessageConverters , con Jackson per JSON, JAXB per XML e molti altri. La primavera 4.1.0 ha aggiunto più HttpMessageConverters :

Per rispondere al tuo ultimo punto, @XmlRootElementè un'annotazione JAXB e non fa parte di JAX-RS. Spring supporta JAXB .

Per un esempio più completo con REST in primavera, dai un'occhiata a questa guida introduttiva (otterrai un esempio completo in esecuzione in 10-15 minuti).

Anche in questo caso l'ultima parte della tua domanda è piuttosto soggettiva: ci sono molte soluzioni popolari per la creazione di servizi REST nella JVM, non solo Jersey e Spring (Dropwizard, Play! Framework, ecc.).


2
Dove suggeriresti a qualcuno di fare una domanda come questa?
Swade

8
"la tua domanda sarebbe chiusa abbastanza rapidamente"! Non così veloce :)
Afshin Moazami

6
Amo stackoverflow e amo quora, non mi è mai piaciuta questa politica di chiusura delle domande soggettive e non ho mai pensato di porre domande tecniche in quora
Kalpesh Soni

Una domanda tangente: possiamo avere sia Jersey che SpringRest nello stesso EAR, entrambi funzionanti insieme per diversi set di servizi?
pramodc84

22

AFAIK, il supporto Spring REST si basa su Spring MVC e la sua implementazione non JAX-RS mentre Jersey ha implementato la specifica JAX-RS. Coloro che hanno Spring (Core, AOP o MVC) nel loro progetto scelgono il supporto Spring ReST rispetto all'implementatore JAX-RS.

Raccomando Jersey perché è maturo, implementa JAX-RS ed è facile da usare.


1
Grazie per la risposta, come eseguire il marshalling e l'unmarshaling in primavera senza usare jax-rs.
Robin Saxena

si, sono d'accordo con te. Spring Web MVC Rest non è così facile da usare. Ci sono molte configurazioni che devi fare attenzione.
Evan Hu

2
La maglia è anche una buona scelta se usi (o vuoi usare) lo stivale primaverile. documentazione
herau

1
Puoi utilizzare la libreria GSON di Google per il marshalling e unmarshaling. Supporta generici Java e oggetti personalizzati.
Tejzeratul
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.