Різниця між JAX-RS та Spring Rest


138

Я переплутався з різницею між JAX-RS (ну, можливо, варто використовувати Джерсі для порівняння, оскільки JAX-RS - просто специфіка) та Spring для Restful послуг . Я намагався шукати більше інформації в Інтернеті, і це стає більш заплутаним. Моя компанія використовує Spring MVC для розробки API відпочинку

Заплутаною частиною є те, що JAX-RS розшифровується як Java API для RESTful веб-сервісів , навесні я також використовую java для розробки RESTful веб-сервісів, тому насправді я не отримую відмінностей. Чи відповідає Весна специфікаціям JAX-RS?

З того, що я знаю дотепер:

  1. JAX-RS є кресленням / специфікацією, він має Джерсі, RESTeasy тощо.

@ CássioMazzochiMolin спасибі за вашу відповідь, я прийму це ще раз, ще одне питання, ви згадали, що Spring Framework не є реалізацією JAX-RS, специфікація якої весна наступна? Спасибі
Хадес

3
Він не реалізує конкретних специфікацій. Це просто весняний спосіб робити речі. Можливості REST забезпечуються spring-webmvcмодулем, який також забезпечує модель-вигляд-контролер Spring.
кассіомолін

Відповіді:


150

JAX-RS

JAX-RS - це специфікація для реалізації веб-служб REST на Java, визначена в даний час JSR-370 . Вона є частиною технологій Java EE , визначених в даний час JSR 366 .

Джерсі (поставляється разом з GlassFish та Payara) є базовою реалізацією JAX-RS, проте є й інші реалізації, такі як RESTEasy (поставляється з JBoss EAP та WildFly) та Apache CXF (поставляється разом з TomEE та WebSphere).

Весняні рамки

Spring Framework є повною структурою , яка дозволяє створювати корпоративні програми Java. Можливості REST надаються модулем Spring MVC (той же модуль, який забезпечує можливості контролера перегляду моделі ). Це не реалізація JAX-RS і може розглядатися як весна альтернатива стандарту JAX-RS.

Екосистема Spring також пропонує широкий спектр проектів для створення корпоративних додатків, що охоплюють стійкість, безпеку, інтеграцію з соціальними мережами, пакетну обробку тощо.

Приклади

Розглянемо наступний контролер ресурсів за допомогою API JAX-RS:

@Path("/greetings")
public class JaxRsController {

    @GET
    @Path("/{name}")
    @Produces(MediaType.TEXT_PLAIN)
    public Response greeting(@PathParam("name") String name) {

        String greeting = "Hello " + name;
        return Response.ok(greeting).build();
    }
}

Еквівалентною реалізацією за допомогою API Spring MVC буде:

@RestController
@RequestMapping("/greetings")
public class SpringRestController {

    @RequestMapping(method = RequestMethod.GET,
                    value = "/{name}", 
                    produces = MediaType.TEXT_PLAIN_VALUE)
    public ResponseEntity<?> greeting(@PathVariable String name) {

        String greeting = "Hello " + name;
        return new ResponseEntity<>(greeting, HttpStatus.OK);
    }
}

Використання весняного черевика та Джерсі

Spring Boot надає spring-boot-starter-jerseyмодуль, що дозволяє використовувати модель програмування JAX-RS для кінцевих точок REST замість Spring MVC. Він добре працює з Джерсі 2.x.

Повний приклад створення веб-програми за допомогою Jersey 2.x та Spring Boot 1.4.x див. У цій відповіді .


Отже, якщо ми використовуємо весняний MVC і передаємо його в GlassFish / Payara, чи потрібно нам відключити реалізацію jax-rs на сервері?
Pradeep_Evol

чи справжня ця стаття з весною 4 dzone.com/articles/… ? що весняна павутина краще зробити веб-сервіси resT, ніж просто весна + Джерсі (JAX-RS)?
tgkprog

58

Анотаційні відмінності

(Станом на 2018 рік) Весняний MVC не стандартизований до анотацій JAX-RS, оскільки його рішення передує JAX-RS. Ось такі еквіваленти:

введіть тут опис зображення

https://stormpath.com/blog/jax-rs-vs-spring-rest-endpoints

Якщо ви використовуєте нестандартизовані API, слід очікувати, що вони будуть застаріли і можливо замінені новим експериментальним API через кілька років. Існує набагато менша відповідальність за відсталу сумісність (наприклад, коли виходять нові версії JDK).


Велике спасибі, це приголомшливо
Bejond

26

Я працював з «Джерсі Рест», «Весняний відпочинок» та «Джерсі Рест» з весною. Вони обоє дуже багаті рамки з приємними реалізаціями. Я б запропонував краще перейти з Spring Spring, якщо ви використовуєте інші сервіси Spring, такі як ORM, Spring security та DI і т. Д. Обидва - це бібліотеки весни, тому мені дуже легко управляти кодом і залежностями.

Плюси JAX-RS:

  • Стандарт JSR можна запускати без контейнера сервлетів (грізлі, простий, ...)
  • Реалізації, готові до виробництва (jersey, cxf, resteasy, restlet, ...) призначені лише для програм REST

Плюси весняного MVC:

  • Забезпечте "повний" стек, а не лише засоби REST

  • Ін'єкційна залежність / АОП / Транзакції

  • Шаблони перегляду, що підключаються (JSP, Freemarker, швидкість, ...)

Ви можете перевірити більше за наступними посиланнями

  1. https://www.infoq.com/articles/springmvc_jsx-rs
  2. Навіщо використовувати JAX-RS / Jersey?

4
Однак JAX-RS можна використовувати і з Spring (для DI, AOP, ...).
Діамон

5

JAX-RS - специфікація, а джерсі тощо - це його реалізація. Люди використовують Spring для створення веб-сервісів RestFul, тому що весна разом зі спокійною реалізацією забезпечує такі речі, як спляча інтеграція, а також такі речі, як програмування, орієнтоване на IOC та Aspect.

Якщо як би ми використовуємо трикотажник для нашої реалізації, проблема буде в тому, що дані повинні вибиратися із зворотного кінця за допомогою деяких технологій ORM, і нам доведеться писати код котла для того ж.

Саме тому люди і навіть підприємства використовують весну, оскільки поряд із реалізацією відпочинку вона забезпечує і весняні засоби. І тепер, використовуючи останню реалізацію весняного завантаження, ми можемо почати розробку дуже швидко без великої кількості конфігурацій.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.