小编典典

JAX-RS 和 Spring Rest 的区别

all

我对JAX-RS (好吧,也许应该使用 Jersey 进行比较,因为 JAX-RS 只是规范)和 Spring for Restful
services
之间的区别感到困惑。我试图在网上搜索更多信息,它变得更加混乱。我的公司正在使用 Spring MVC 开发 Restful API

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

据我所知:

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

阅读 108

收藏
2022-07-31

共1个答案

小编典典

JAX-RS

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

Jersey(随 GlassFish 和 Payara 提供)是 JAX-RS
参考实现,但是还有其他实现,例如RESTEasy(随 JBoss EAP 和 WildFly
提供)和Apache CXF(随 TomEE 和 WebSphere 提供)。

春天框架

Spring Framework是一个完整的框架,允许您创建 Java 企业应用程序。REST 功能由Spring
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模块允许您将 JAX-RS 编程模型用于 REST 端点而不是 Spring
MVC。它适用于 Jersey 2.x。

2022-07-31