Spring 4 против Джерси для веб-служб REST

Мы планируем создать новое приложение с версией spring 4.0.6. Мы используем контроллер, который может возвращать "XML" или "JSON". В предыдущем проекте мы успешно реализовали Джерси с поддержкой spring для поддержки REST с использованием API JAX-RS, но после прочтения нескольких статей и предложений от пожилых людей они сказали, что spring обеспечивает довольно хорошую поддержку REST.

Некоторые моменты, которые меня действительно смутили, если я использую поддержку spring REST без использования JAX-RS и Джерси:

  • Как marshaling и unmarshaling выполняются в spring MVC?

  • Нужно ли для маршалинга или unmarshaling использовать jax-rs.

  • Если marshaling и unmarshaling автоматически обрабатываются spring, то как он узнает о xmlRootElements.

Я все еще смущен, если spring, оказывая очень хорошую поддержку REST, то почему люди все еще идут с Джерси для REST? На самом деле интересно узнать подробнее.

Если я сказал что-то не так, проигнорируйте его. Объяснение с примером действительно полезно.

Спасибо заранее!

Ответ 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:

Чтобы ответить на вашу последнюю точку, @XmlRootElement является аннотацией JAXB и не является частью JAX-RS. Spring поддерживает JAXB.

Для более полного примера с REST в Spring ознакомьтесь с этим руководством по началу работы (вы получите полный пример работы в 10-15 минут).

Опять же, последняя часть вашего вопроса довольно субъективна - есть много популярных решений для создания служб REST в JVM, а не только для Джерси и Spring (Dropwizard, Play! Framework и т.д.).

Ответ 2

AFAIK Spring Поддержка REST основана на Spring MVC и не на JAX-RS, а на Джерси реализована спецификация JAX-RS. Те, у кого Spring (Core, AOP или MVC) в своем проекте выбирает Spring поддержку ReST над JAX-RS-исполнителем.

Я рекомендую Джерси своим зрелым, реализует JAX-RS и прост в использовании.