Ответ 1
Я бы сказал, что и Джерси, и Spring MVC великолепны - каждый проект имеет свой собственный стиль и сильные стороны. Во всяком случае, переполнение стека - это не подходящее место для запроса субъективных сравнений (ваш вопрос будет закрыт довольно быстро). Если вы уже используете Spring для всего остального и не обязаны использовать JAX-RS, тогда Spring MVC имеет смысл.
Относительно таких функций, как (un) marshalling, JAX-RS - это всего лишь спецификация - другие библиотеки могут предлагать подобные функции без реализации того же API.
-
Вместо MessageBodyReaders/Writers, Spring MVC использует HttpMessageConverters для обработки (un) сортировки ресурсов REST. Spring MVC обрабатывает согласование контента и выбирает лучший доступный конвертер для задания (вы можете аннотировать методы, чтобы намекнуть на то, какой тип медиа они производят/потребляют).
-
Нет, нет необходимости использовать JAX-RS для (un) ресурсов маршалла. Фактически, реализации JAX-RS и Spring MVC используют сторонние библиотеки сериализации для выполнения задания; поэтому он не привязан к определенному стандарту.
-
В версии 4.0.6 Spring поддерживает много HttpMessageConverters, с Jackson для JSON, JAXB для XML и многих других, Spring 4.1.0 добавлено больше HttpMessageConverters:
- Теперь Джексон доступен как для JSON, так и для XML
- Google Протобуф
- Gson для JSON, в качестве альтернативы Джексону
Чтобы ответить на вашу последнюю точку, @XmlRootElement
является аннотацией JAXB и не является частью JAX-RS. Spring поддерживает JAXB.
Для более полного примера с REST в Spring ознакомьтесь с этим руководством по началу работы (вы получите полный пример работы в 10-15 минут).
Опять же, последняя часть вашего вопроса довольно субъективна - есть много популярных решений для создания служб REST в JVM, а не только для Джерси и Spring (Dropwizard, Play! Framework и т.д.).