我对 JAX-RS (因为JAX-RS只是规格)也许应该使用Jersey进行比较)与 Spring for Restful服务 之间的区别感到困惑。我试图在线搜索更多信息,但变得更加混乱。我公司正在使用Spring MVC开发Restful API
令人困惑的部分是,JAX-RS代表用于 RESTful Web服务的Java API ,在spring,我还使用Java开发RESTful Web Services,所以我实际上并没有区别。Spring是否遵循JAX-RS规范?
从我所知道到现在:
JAX-RS是用于以Java实现REST Web服务的规范,当前由JSR-370定义。它是JSR 366当前定义的Java EE技术的一部分。
泽西(GlassFish和Payara附带)是JAX- RS参考实现,但是还有其他实现,例如RESTEasy(与JBoss EAP和WildFly附带)和Apache CXF(与TomEE和WebSphere附带)。
在Spring框架是一个完整的框架,它允许你创建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