Solución:
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ía con bastante rapidez). Si ya está usando Spring para todo lo demás y no lo está requerido para usar JAX-RS, Spring MVC tiene mucho sentido.
Con respecto a características como la (des) ordenación, JAX-RS es solo una especificación después de todo; otras bibliotecas pueden ofrecer características similares sin implementar la misma API.
-
En lugar de MessageBodyReaders / Writers, Spring MVC está usando 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).
-
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.
-
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:
- Jackson ahora está disponible para JSON y XML
- Google Protobuf
- Gson para JSON, como alternativa a Jackson
Para responder a tu último punto, @XmlRootElement
es una anotación JAXB y no forma 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.).
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 es maduro, implementa JAX-RS y es fácil de usar.