Spring 4 vs Jersey для веб-сервисов REST

117

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

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

  1. Как маршалинг и демаршалинг выполняется в Spring MVC?

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

  3. Если маршалинг и демаршалинг автоматически обрабатываются Spring, то как он узнает о xmlRootElements.

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

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

Заранее спасибо!!

Робин Саксена
источник

Ответы:

119

Я бы сказал, что и Jersey, и Spring MVC великолепны - у каждого проекта есть свой стиль и сильные стороны. В любом случае, Stack Overflow - не лучшее место для субъективных сравнений (ваш вопрос будет закрыт довольно быстро). Если вы уже используете Spring для всего остального и не требуются использовать JAX-RS, тогда Spring MVC имеет смысл.

Что касается таких функций, как (не) маршалинг, JAX-RS - это всего лишь спецификация - другие библиотеки могут предлагать аналогичные функции без реализации того же API.

  1. Вместо MessageBodyReaders / Writers Spring MVC использует HttpMessageConverters для обработки (не) маршалинга ресурсов REST. Spring MVC обрабатывает согласование контента и выбирает лучший доступный преобразователь для работы (вы можете аннотировать методы, чтобы намекнуть, какой тип мультимедиа они производят / потребляют).

  2. Нет, не обязательно использовать JAX-RS для (де) маршалинга ресурсов. Фактически, реализации JAX-RS и Spring MVC используют сторонние библиотеки сериализации для выполнения этой работы; поэтому он не привязан к определенному стандарту.

  3. В своей версии 4.0.6 Spring поддерживает множество HttpMessageConverters , включая Jackson для JSON, JAXB для XML и многие другие. Spring 4.1.0 добавил больше HttpMessageConverters :

    • Джексон теперь доступен как для JSON, так и для XML.
    • Google Protobuf
    • Gson для JSON , как альтернатива Jackson

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

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

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

Брайан Клозел
источник
2
Где бы вы посоветовали кому-нибудь задать такой вопрос?
Swade
8
"Ваш вопрос будет закрыт довольно быстро"! Не так быстро :)
Афшин Моазами
6
Мне нравится stackoverflow, и мне нравится квора, мне никогда не нравилась эта закрывающая политика субъективных вопросов, и я никогда не думал задавать технические вопросы в квору
Сони
Один касательный вопрос: можем ли мы иметь и Jersey, и SpringRest в одном EAR, работающие вместе для разных наборов сервисов?
pramodc84
22

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

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

VGaur
источник
1
Спасибо за ответ, как маршалинг и демаршалинг выполняются весной без использования jax-rs.
Робин Саксена
да, я согласен с тобой. Spring Web MVC Rest не так прост в использовании. Вам нужно позаботиться о многих конфигурациях.
Эван Ху
2
Джерси также является хорошим выбором, если вы используете (или хотите использовать) Spring boot. cf documentation
herau
1
Вы можете использовать библиотеку Google GSON для маршалинга и демаршалинга. Он поддерживает универсальные шаблоны Java и настраиваемые объекты.
Tejzeratul 01