一尘不染

JAX-RS和Spring Rest之间的区别

spring-mvc

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

从我所知道到现在:

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

阅读 1177

收藏
2020-06-01

共1个答案

一尘不染

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框架

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

Spring Boot提供了spring-boot-starter-jersey允许您将JAX-RS编程模型用于REST端点而不是Spring
MVC的模块。它与Jersey 2.x搭配使用效果很好。

2020-06-01