我对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 规范?
据我所知:
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 提供的spring-boot-starter-jersey模块允许您将 JAX-RS 编程模型用于 REST 端点而不是 Spring MVC。它适用于 Jersey 2.x。
spring-boot-starter-jersey