resteasy 是 jboss的一个开源restful service实现参考。本文假设读者熟悉spring mvc,但是不了解或者没有使用过resteasy的用户。
其实一直以来,笔者实际都是使用spring mvc,对于研究resteasy没有兴趣。至于最近研究resteasy,纯属因为现在公司使用dubbox作为rpc框架,而dubbox使用resteasy作为REST实现库。
简单地说,resteasy核心就是一个servlet前端控制器,理念都一样。
应该来说,resteasy的优势在于相比spring mvc而言,更加的专注,简单。就大型应用而言,绝对是spring mvc占据优势。
就简洁性而言,应该来说在spring 4.0引入spring restcontroller之后,优势就没有那么明显了,应该来说3.2之前对restful还不那么有信心。
就像我们现在发现基本上mvc上spring mvc占据了绝大部分的新项目,估计以后resteasy也会小众化。
至于说resteasy为什么活下来,感觉上spring社区有个比较明显的倾向就是好像不怎么吃螃蟹,等到趋势比较明朗之后,要么就整合对方,要么就强行自己引入一套接口玩死对方。
resteasy是JAX-RS的参考实现之一,规范制定者是核心人员之一,所以概念和属于上基本上完全各种restful service教材上能够直接对应。spring mvc方面,就没有那么直接的对应了,估计是鄙视J2EE的一种商业手法。
就应用而言,如果restful作为rpc的实现机制,resteasy应该是有优势的,毕竟集成没有spring mvc那么多配置(当然spring cloud除外),但作为应用,估计干不过spring mvc。
使用resteasy,最好使用servlet 3.0以上的容器,比如tomcat 7+。
resteasy, 主要有三个核心依赖包:
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxrs</artifactId>
<version>${resteasy.version}</version>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxb-provider</artifactId>
<version>${resteasy.version}</version>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-servlet-initializer</artifactId>
<version>${resteasy.version}</version>
</dependency>
如此配置的话,Resteasy会使用ServletContainerInitializer初始化应用,自动扫描资源和暴露的服务。resteasy全局的一些配置参数可以通过web.xml中的<context-param>进行传递。关键的配置包括如下:
resteasy.servlet.mapping.prefix:设置Resteasy servlet映射的url匹配模式,默认为/*。
一般来说,使用resteasy的web.xml配置为:
<servlet-mapping>
<servlet-name>Resteasy</servlet-name>
<url-pattern>/restful-services/*</url-pattern>
</servlet-mapping>
<context-param>
<param-name>resteasy.servlet.mapping.prefix</param-name>
<param-value>/restful-services</param-value>
</context-param>
如果要使用resteasy作为restful service的客户端框架的话,最少需要以下依赖:
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxrs</artifactId>
<version>${resteasy.version}</version>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-client</artifactId>
<version>${resteasy.version}</version>
</dependency>
常用的注解并不是很多,主要包括:
@Path
@GET
@POST
@PathParam
@QueryParam
@HeaderParam
@CookieParam
@FormParam
@DefaultValue
@Context
常用功能部分还是比较简单的,可以参考官方文档,应该一两天足够熟悉了。
javadoc可参考http://docs.jboss.org/resteasy/docs/3.0.22.Final/javadocs/index.html。