JAX-RS 与 Spring Rest 的区别

我混淆了 JAX-RS宁静服务的春天之间的区别(好吧,也许应该使用 Jersey 进行比较,因为 JAX-RS 只是 spec)。我试着在网上搜索更多的信息,结果越来越混乱。我的公司正在使用 SpringMVC 开发 Restful API

令人困惑的是,JAX-RS 代表 JAX-RS,在 Spring 中我也使用 Java 来开发 RESTful Web Services,所以我实际上并没有得到区别。Spring 是否遵循 JAX-RS 规范?

据我所知:

  1. JAX-RS 是一个蓝图/规范,它具有 Jersey、 RESTeasy 等实现。
108109 次浏览

JAX-RS 是规范,运动衫等是其实现。 人们使用 Spring 来创建 RestFull Web Services,因为 Spring 和 RestFul 实现一起提供了休眠集成之类的东西,还提供了 IOC 和面向方面的编程之类的东西。

如果我们在实现中使用 jersey,那么问题就是必须使用一些 ORM 技术从后端获取数据,而且我们必须为此编写样板代码。

这就是为什么人们甚至企业使用 Spring 以及其他的实现它也提供 Spring 设施的原因。现在使用最新的 Spring 引导实现,我们可以在没有大量配置的情况下非常快速地开始开发。

我在泽西休息中心,春季休息中心和泽西休息中心都工作过。它们都是具有良好实现的非常丰富的框架。我建议,如果你正在使用其他 Spring 服务,比如 ORM、 Spring 安全性和 DI 等,最好使用 Spring rest。两者都是 Spring 库,因此我觉得管理代码和依赖项有点简单

JAX-RS 的优点:

  • JSR 标准可以在没有 servlet 容器的情况下运行(Grizzly,simple, ...)
  • 生产就绪的实现(jersey、 cxf、 resteasy、 restlet、, ...)仅为 REST 应用程序设计

春季 MVC 优点:

  • 提供“完整”堆栈,而不仅仅是 REST 工具

  • 依赖注入/AOP/交易

  • 可插入的视图模板(JSP、自由标记、速度、 ...)

你可在以下连结查阅详情

  1. Https://www.infoq.com/articles/springmvc_jsx-rs
  2. 为什么使用 JAX-RS/Jersey?

JAX-RS

JAX-RS 是用于在 Java 中实现 REST Web 服务的 规格,目前由 JSR-370定义。它是 JavaEE 技术的一部分,目前由 JSR 366定义。

Jersey (随 GlassFish 和 Payara 发布)是 JAX-RS 参考实现,但是还有其他实现,如 放松(随 JBoss EAP 和 WildFly 发布)和 Apache CXF(随 TomEE 和 WebSphere 发布)。

Spring 框架

Spring 框架是允许您创建 Java 企业应用程序的 完整的框架。REST 功能由 春季 MVC模块提供(与提供 模型-视图-控制器功能的模块相同)。它不是 JAX-RS 实现,可以看作是 JAX-RS 标准的 Spring 替代品。

Spring 生态系统还提供了用于创建企业应用程序的 范围广泛的项目,包括持久性、安全性、与社交网络的集成、批处理等。

例子

考虑使用 JAX-RS API 的下列资源控制器:

@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();
}
}

使用 Spring MVC API 的等价实现如下:

@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 和 Jersey

Spring Boot 提供了 spring-boot-starter-jersey模块,它允许您为 REST 端点而不是 Spring MVC 使用 JAX-RS 编程模型。它与 Jersey 2.x 非常匹配。

有关使用 Jersey 2.x 和 Spring Boot 1.4.x 创建 Web 应用程序的完整示例,请参考此 回答

注释差异

(截至2018年) Spring MVC 还没有标准化为 JAX-RS 注释,因为它的解决方案早于 JAX-RS:

enter image description here

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

如果您正在使用非标准化的 API,那么您应该预料到它们将被废弃,并可能在几年内被更新的实验性 API 所取代。对于向下兼容的问责性要少得多(例如,当一个新的 JDK 版本发布时)。