REST这个词,是Roy Thomas Fielding在他2000年的博士论文中提出的。
Fielding将他对互联网软件的架构原则,定名为REST,即Representational State Transfer的缩写。即”表现层状态转化”。如果一个架构符合REST原则,就称它为RESTful架构。
关于RESTful架构的理解,这篇博文讲述的很精彩:
博文地址:http://www.ruanyifeng.com/blog/2011/09/restful.html**
定义RESTful风格的WebService,通过cxf整合spring,顺便记录本人在定义REST接口遇到的一些问题以及我的解决办法。
一,环境
一如既往,环境配置,采用maven的项目结构,添加cxf相关依赖
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>2.7.9</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>2.7.9</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxrs</artifactId>
<version>2.7.9</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-bundle-jaxrs</artifactId>
<version>2.7.9</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http- jetty</artifactId>
<version>2.7.9</version>
</dependency>
spring配置文件配置接口定义,这里采用Jackson解析json,所以需要在pom.xml中添加Jackson的依赖包。
<!-- RESTFUL -->
<jaxrs:server id="userServiceContainer" address="/userRestService">
<jaxrs:serviceBeans>
<ref bean="userService" />
</jaxrs:serviceBeans>
<jaxrs:extensionMappings>
<entry key="json" value="application/json" />
</jaxrs:extensionMappings>
<jaxrs:providers>
<ref bean="jsonProvider" />
</jaxrs:providers>
</jaxrs:server>
<bean id="jsonProvider" class="org.codehaus.jackson.jaxrs.JacksonJsonProvider" />
Service接口实现定义如下:
@Service("userService")
public class UserServiceImpl implements UserService {
}
在Service接口上定义GET方法
@GET
@Path("/getUserInfoById/{userId}")
@Produces({MediaType.APPLICATION_JSON})
public UserInfo getUserInfoById(@PathParam("userId") String userId);
@GET定义方法为get方法,@Produces定义接口返回的数据类型为json,@Path定义访问接口的路径,花括号内是传递的参数名,@PathParam定义传递的参数名。
POST方法使用:
@POST
@Path("/modifyUser")
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})
public void modifyUser(UserInfo userInfo);
@Consumes定义是传递的参数类型,需要注意的是当选择传递的数据类型是json参数类型时,post方法无法解析多个数据,解决办法就是修改参数类型,将参数类型改成MediaType.APPLICATION_FORM_URLENCODED,用@FormParam来定义传递的参数名称