JAX-RS和Spring Rest之间的区别

时间:2017-03-22 07:01:04

标签: spring-mvc jersey jax-rs

我对 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规范?

据我所知,直到现在:

  1. JAX-RS是一个蓝图/规范,它有Jersey,RESTeasy等作为实现。

4 个答案:

答案 0 :(得分:96)

JAX-RS

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

Spring Frameworkfull 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和Jersey

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。以下是等价物:

enter image description here

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

如果您使用的是非标准化的API,您应该会在几年内推荐使用它们,并且可能会被更新的实验API取代。向后兼容性的责任要少得多(例如,当发布新的JDK版本时)。

答案 2 :(得分:16)

我和泽西休息,春季休息和泽西休息一起工作。它们都是非常丰富的框架,具有很好的实现。如果您使用其他Spring服务(如ORM,Spring安全性和DI等),我建议最好使用Spring休息。两者都是Spring库,所以我觉得管理代码和依赖项的文章很少

JAX-RS专业人士:

  • JSR标准可以在没有servlet容器的情况下运行(灰白,简单, ......)
  • 生产就绪的实施(平针织物,cxf,resteasy,restlet, ...)仅适用于REST应用程序

Spring MVC专业人士:

  • 提供“完整”堆栈,而不仅仅是REST设施

  • 依赖注入/ AOP /交易

  • 可插拔视图模板(JSP,freemarker,velocity,...)

您可以在以下链接中查看更多信息

  1. https://www.infoq.com/articles/springmvc_jsx-rs
  2. Why use JAX-RS / Jersey?

答案 3 :(得分:4)

JAX-RS是规格和球衣等都是它的实现。 人们使用Spring来制作RestFul Web服务,因为Spring和restful实现提供了诸如hibernate集成之类的东西,以及像IOC和Aspect导向编程这样的东西。

如果我们使用平针织物进行实施,那么问题就是必须使用一些ORM技术从后端获取数据,我们将不得不为其编写样板代码。

这就是人们甚至企业使用spring以及Rest实现它也提供Spring设施的原因。现在使用最新的Spring启动实现,我们可以非常快速地开始开发而无需大量配置。