Spring 4 vs Jersey para servicios web REST

117

Estamos planeando hacer una nueva aplicación con la versión Spring 4.0.6. Usamos un controlador que puede devolver "XML" o "JSON". En el proyecto anterior, implementamos con éxito Jersey con Spring para soporte REST usando JAX-RS API, pero después de leer algunos artículos y sugerencias de personas mayores, dijeron que Spring está brindando un soporte REST bastante bueno.

Algunos de los puntos que realmente me confunden si uso el soporte Spring REST sin usar JAX-RS y Jersey son:

  1. ¿Cómo se hace la clasificación y la eliminación en Spring MVC?

  2. ¿Es necesario utilizar jax-rs para calcular o deshacer la clasificación?

  3. Si Spring maneja automáticamente la clasificación y la eliminación de la clasificación, entonces, ¿cómo sabe acerca de xmlRootElements?

Todavía estoy confundido si Spring está demostrando un muy buen soporte de REST, entonces ¿por qué la gente todavía elige Jersey para REST? Realmente buscando saber más en detalles.

Si dije algo incorrecto, ignórelo. La explicación con un ejemplo es realmente útil.

¡¡Gracias por adelantado!!

Robin Saxena
fuente

Respuestas:

119

Yo diría que tanto Jersey como Spring MVC son geniales: cada proyecto tiene su propio estilo y fortalezas. De todos modos, Stack Overflow no es el lugar adecuado para hacer comparaciones subjetivas (su pregunta se cerrará con bastante rapidez). Si ya está usando Spring para todo lo demás y no está obligado a usar JAX-RS, Spring MVC tiene mucho sentido.

Con respecto a características como la (des) clasificación, JAX-RS es solo una especificación después de todo; otras bibliotecas pueden ofrecer características similares sin implementar la misma API.

  1. En lugar de MessageBodyReaders / Writers, Spring MVC está utilizando HttpMessageConverters para manejar ( des ) ordenar los recursos REST. Spring MVC maneja la negociación de contenido y elige el mejor convertidor disponible para el trabajo (puede anotar métodos para indicar qué tipo de medio producen / consumen).

  2. No, no es necesario usar JAX-RS para (des) marshall recursos. De hecho, las implementaciones de JAX-RS y Spring MVC usan bibliotecas de serialización de terceros para hacer el trabajo; por lo que no está vinculado a un estándar en particular.

  3. En su versión 4.0.6 , Spring admite muchos HttpMessageConverters , con Jackson para JSON, JAXB para XML y muchos otros. Spring 4.1.0 agregó más HttpMessageConverters :

Para responder a su último punto, @XmlRootElementes una anotación JAXB y no es parte de JAX-RS. Spring es compatible con JAXB .

Para obtener un ejemplo más completo con REST en Spring, consulte esta guía de inicio (obtendrá un ejemplo completo ejecutándose en 10-15 minutos).

Nuevamente, la última parte de su pregunta es bastante subjetiva: hay muchas soluciones populares para crear servicios REST en la JVM, no solo Jersey y Spring (Dropwizard, Play! Framework, etc.).

Brian Clozel
fuente
2
¿Dónde sugerirías que alguien hiciera una pregunta como esta?
swade
8
"su pregunta se cerrará bastante rápido"! No tan rápido :)
Afshin Moazami
6
Amo stackoverflow y amo quora, nunca me ha gustado esta política de cierre de preguntas subjetivas y nunca he pensado en hacer preguntas técnicas en quora
Kalpesh Soni
Una pregunta tangente: ¿Podemos tener Jersey y SpringRest en el mismo EAR, ambos funcionando juntos para diferentes conjuntos de servicios?
pramodc84
22

El soporte de AFAIK Spring REST se basa en Spring MVC y su implementación no JAX-RS, mientras que Jersey ha implementado la especificación JAX-RS. Aquellos que tienen Spring (Core, AOP o MVC) en su proyecto eligen el soporte Spring ReST sobre el implementador JAX-RS.

Recomiendo Jersey porque está maduro, implementa JAX-RS y es fácil de usar.

VGaur
fuente
1
Gracias por la respuesta, cómo se hizo la clasificación y la eliminación en la primavera sin usar jax-rs.
Robin Saxena
si, estoy de acuerdo contigo. Spring Web MVC Rest no es tan fácil de usar. Hay muchas configuraciones que debe tener en cuenta.
Evan Hu
2
Jersey también es una buena opción si usa (o quiere usar) Spring Boot. documentación
herau
1
Puede utilizar la biblioteca GSON de Google para calcular y deshacer. Admite objetos genéricos y personalizados de Java.
Tejzeratul