REST API:JAX-RS 与 Spring

1、概览

本文将带你了解 JAX-RS 和 Spring MVC 在 REST API 开发方面的区别。

2、Jakarta RESTful Web 服务

要成为 Jakarta EE 世界的一部分,一项功能必须具备规范、兼容的实现和 TCK(技术兼容套件)。JAX-RS 就是一套用于构建 REST 服务的规范。其最著名的参考实现是 RESTEasyJersey

现在,通过实现一个简单的 Controller 来熟悉一下 Jersey:

@Path("/hello")
public class HelloController {

    @GET
    @Path("/{name}")
    @Produces(MediaType.TEXT_PLAIN)
    public Response hello(@PathParam("name") String name) {
        return Response.ok("Hello, " + name).build();
    }

}

上面的代码中,端点返回一个简单的 “text/plain” 响应,这是由 @Produces 注解指定的。具体来说,暴露了一个名为 hello 的 HTTP 资源,它接受一个名为 name 的参数,使用了两个 @Path 注解进行路径的定义。还使用 @GET 注解指定它是一个 GET 请求。

3、使用 Spring MVC 实现 REST

Spring MVC 是 Spring Framework 的一个模块,用于创建 Web 应用程序。它为 Spring Framework 添加了 REST 功能。

使用 Spring MVC 开发一个与上面相同的 GET 请求示例:

@RestController
@RequestMapping("/hello")
public class HelloController {

    @GetMapping(value = "/{name}", produces = MediaType.TEXT_PLAIN_VALUE)
    public ResponseEntity<?> hello(@PathVariable String name) {
        return new ResponseEntity<>("Hello, " + name, HttpStatus.OK);
    }

}

如上,@RequestMapping 指定正在处理一个名为 hello HTTP 的资源。通过 @GetMapping 注解,指定这是一个 GET 请求。它接受一个名为 name 的参数,并返回一个 “text/plain” 响应。

4、区别

JAX-RS 的关键在于提供一套 Java 注解,并将其应用于普通 Java 对象。实际上,这些注解可以帮助抽象出客户端-服务器通信的底层细节。为了简化实现,它提供了注解来处理 HTTP 请求和响应,并将它们绑定到代码中。JAX-RS 只是一个规范,需要兼容的实现才能使用

Spring MVC 是一个具有 REST 功能的完整框架。与 JAX-RS 一样,它也提供了有用的注解来抽象低级细节。Spring MVC 的主要优势在于它是 Spring 框架生态系统的一部分。因此,它允许像其他 Spring 模块一样使用依赖注入。此外,它还能与 Spring AOP、Spring Data REST 和 Spring Security 等其他组件轻松集成。

5、总结

本文介绍了 JAX-RS 和 Spring MVC 在 REST API 开发方面的区别。


Ref:https://www.baeldung.com/rest-api-jax-rs-vs-spring