我对 JAX-RS 之间的区别感到困惑(好吧,也许应该使用Jersey进行比较,因为JAX-RS只是规范)和 Spring for Restful services 。我试图在网上搜索更多信息,它变得更加混乱。我的公司正在使用Spring MVC来开发Restful API
令人困惑的部分是,JAX-RS代表用于RESTful Web服务的Java API ,在Spring中我也使用java来开发RESTful Web服务,所以我实际上并没有得到差异。 Spring是否遵循JAX-RS规范?
据我所知,直到现在:
答案 0 :(得分:96)
JAX-RS是用于在Java中实现REST Web服务的specification,目前由JSR-370定义。它是Java EE technologies的一部分,目前由JSR 366定义。
Jersey(GlassFish和Payara附带)是JAX-RS参考实现,但是还有其他实现,例如RESTEasy(随JBoss EAP和WildFly一起提供)和Apache CXF(与TomEE和WebSphere一起发布。
Spring Framework是full framework,允许您创建Java企业应用程序。 REST功能由Spring MVC模块(提供模型 - 视图 - 控制器功能的相同模块)提供。它不是JAX-RS实现,可以看作是JAX-RS标准的Spring替代方案。
Spring生态系统还提供wide range of projects用于创建企业应用程序,包括持久性,安全性,与社交网络的集成,批处理等。
使用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提供了spring-boot-starter-jersey
模块,允许您使用REST端点的JAX-RS编程模型而不是Spring MVC。它与Jersey 2.x一起运作良好。
有关使用Jersey 2.x和Spring Boot 1.4.x创建Web应用程序的完整示例,请参阅此answer。
答案 1 :(得分:26)
(截至2018年)Spring MVC尚未标准化为JAX-RS注释,因为其解决方案早于JAX-RS。以下是等价物:
https://stormpath.com/blog/jax-rs-vs-spring-rest-endpoints
如果您使用的是非标准化的API,您应该会在几年内推荐使用它们,并且可能会被更新的实验API取代。向后兼容性的责任要少得多(例如,当发布新的JDK版本时)。
答案 2 :(得分:16)
我和泽西休息,春季休息和泽西休息一起工作。它们都是非常丰富的框架,具有很好的实现。如果您使用其他Spring服务(如ORM,Spring安全性和DI等),我建议最好使用Spring休息。两者都是Spring库,所以我觉得管理代码和依赖项的文章很少
JAX-RS专业人士:
Spring MVC专业人士:
提供“完整”堆栈,而不仅仅是REST设施
依赖注入/ AOP /交易
可插拔视图模板(JSP,freemarker,velocity,...)
您可以在以下链接中查看更多信息
答案 3 :(得分:4)
JAX-RS是规格和球衣等都是它的实现。 人们使用Spring来制作RestFul Web服务,因为Spring和restful实现提供了诸如hibernate集成之类的东西,以及像IOC和Aspect导向编程这样的东西。
如果我们使用平针织物进行实施,那么问题就是必须使用一些ORM技术从后端获取数据,我们将不得不为其编写样板代码。
这就是人们甚至企业使用spring以及Rest实现它也提供Spring设施的原因。现在使用最新的Spring启动实现,我们可以非常快速地开始开发而无需大量配置。