我混淆了JAX-RS之间的区别(好吧,也许应该使用Jersey进行比较,因为JAX-RS只是规范)和Spring for Restful服务.我试图在网上搜索更多信息,它变得更加混乱.我的公司正在使用Spring MVC来开发Restful API
令人困惑的部分是,JAX-RS代表用于RESTful Web服务的Java API,在Spring中我也使用java来开发RESTful Web服务,所以我实际上并没有得到差异.Spring是否遵循JAX-RS规范?
据我所知,直到现在:
JAX-RS是一个蓝图/规范,它有Jersey,RESTeasy等作为实现.
cassiomolin.. 121
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框架是一个完整的框架,它允许你创建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
模块允许您使用REST端点的JAX-RS编程模型而不是Spring MVC.它与Jersey 2.x配合得很好.
有关使用Jersey 2.x和Spring Boot 1.4.x创建Web应用程序的完整示例,请参阅此答案.
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框架是一个完整的框架,它允许你创建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
模块允许您使用REST端点的JAX-RS编程模型而不是Spring MVC.它与Jersey 2.x配合得很好.
有关使用Jersey 2.x和Spring Boot 1.4.x创建Web应用程序的完整示例,请参阅此答案.
(截至2018年)Spring没有标准化为JAX-RS注释,因为它的解决方案早于JAX-RS.以下是等价物:
https://stormpath.com/blog/jax-rs-vs-spring-rest-endpoints
如果您使用的是非标准化的API,您应该会在几年内推荐使用它们,并且可能会被更新的实验API取代.向后兼容性的责任要少得多(例如,当新的JDK版本发布时).
春天,我和泽西休息,春季休息和泽西休息一起工作.它们都是非常丰富的框架,具有很好的实现.如果您使用其他Spring服务,如ORM,Spring安全性和DI等,我建议最好使用Spring休息.两者都是spring库,所以我觉得有点文章来管理代码和依赖项
JAX-RS专业人士:
JSR标准可以在没有servlet容器的情况下运行(灰熊,简单......)
生产就绪的实现(jersey,cxf,resteasy,restlet,...)仅适用于REST应用程序
Spring MVC专业人士:
提供"完整"堆栈,而不仅仅是REST工具
依赖注入/ AOP /交易
可插拔视图模板(JSP,freemarker,velocity,...)
您可以在以下链接中查看更多信息
https://www.infoq.com/articles/springmvc_jsx-rs
为什么要使用JAX-RS/Jersey?
JAX-RS是其规格,球衣等是其实现。人们之所以使用Spring来制作RestFul Web服务,是因为Spring与宁静的实现一起提供了诸如休眠集成之类的功能,还提供了诸如IOC和面向方面的编程之类的功能。
好像我们使用jersey来实现一样,问题是必须使用某些ORM技术从后端获取数据,并且我们必须为此编写样板代码。
这就是人们甚至企业使用Spring以及Rest实现的原因,它也提供了Spring设施。现在,使用最新的Spring引导实现,我们可以快速进行开发,而无需进行大量配置。