首页 > 代码库 > 基于rest方式的web service

基于rest方式的web service

具体可以参详我的博客:http://www.paisays.com/?p=79

公司跨系统的接口都换成了rest风格,对于没有使用过rest的人真是感觉茫茫大海,无从下手啊。查找了一些资料并询问有经验的人,最后算是知道了基于cxf框架的rest风格的web service 怎么用,下面我简单介绍一下:

首先需要在web.xml文件中进行配置:

1
2
3
4
5
6
7
8
9
<servlet>
    <servlet-name>CXFServlet</servlet-name>
    <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
    <servlet-mapping>
    <servlet-name>CXFServlet</servlet-name>
    <url-pattern>/services/*</url-pattern>
</servlet-mapping>

11
在cxf-servlet.xml文件中需要配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<bean id ="crmTaskOrgService" class="com.deppon.foss.service.impl.CrmTaskOrgService">
    <property name="matchTaskOrgService"ref="matchTaskOrgService"></property>
</bean>
 
<!-- restfull -->
<jaxrs:server id="fossToCrmTaskOrgService"address="/crmUrl">
    <jaxrs:serviceBeans>
        <ref bean="crmTaskOrgService"/>
    </jaxrs:serviceBeans>
    <jaxrs:inInterceptors>
        <beanclass="org.apache.cxf.interceptor.LoggingInInterceptor"></bean>
    </jaxrs:inInterceptors>
    <jaxrs:outInterceptors>
        <beanclass="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean>
    </jaxrs:outInterceptors>
</jaxrs:server>

serviecesBeans里面是你spring中配置的那个bean,这里CrmTaskOrgService必须给他一个接口,因为spring自动装配会默认用jdk的动态代理来完成,如果不想写接口也行,在CrmTaskOrgService中添加一个默认的构造器。具体原因请查阅:http://www.paisays.com/?p=70 ;address是很重要的参数,会在最后的url中显示,类似命名空间。

不要忘记引入相应的标签:

111

然后是接口配置(也可以写在实现类中):

 

1
2
3
4
5
6
7
8
@Produces(MediaType.APPLICATION_JSON)
publicinterface ICrmTaskOrgService {
 
    @GET
    @Path(value =http://www.mamicode.com/"/matchTaskOrg/{waybillNo}")
    List<OrgDto> matchTaskOrg(@PathParam("waybillNo") String waybillNo);
 
}
@Produces(MediaType.APPLICATION_JSON) 声明返回类型是json的形式;
@GET  表示是用get方式提取数据。rest的思想是将http的四种动作(get,put,post,delete)用于他们真正的地方,现在无论是增删改查,基本都是用的get 或者post,put和delete很少用到。rest则提倡将相应的动作用到相应的请求上,get就是取资源,post是新增资源,put是更新,delete就是删除资源。
@Path(value = http://www.mamicode.com/"/matchTaskOrg/{waybillNo}")  定义这个接口的路径,类似命名空间。{}中是url传过来的参数。
@PathParam("waybillNo")  声明参数

引入相应的jar
22

如果接口返回的是自己定义的实体类,或者集合类等,需要在对应的实体加上下面注解:
1
2
@XmlRootElement
publicclass OrgDto implements Serializable{

最后一步是 添加相应的maven库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
       <dependency>
      <groupId>javax.ws.rs</groupId>
      <artifactId>javax.ws.rs</artifactId>
      <version>1.0</version>
</dependency>
<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-frontend-jaxws</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-transports-http</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-transports-http-jetty</artifactId>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-frontend-jaxrs</artifactId>
</dependency>

jar包不要多,否则会报jar冲突的错误。

都配置好后就可以访问了,

url : http://localhost:8080/test/services/crmUrl/matchTaskOrg/976865745

测试结果:



33

33

基于rest方式的web service