首页 > 代码库 > 基于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> |
在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> <bean class = "org.apache.cxf.interceptor.LoggingInInterceptor" ></bean> </jaxrs:inInterceptors> <jaxrs:outInterceptors> <bean class = "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中显示,类似命名空间。
不要忘记引入相应的标签:
然后是接口配置(也可以写在实现类中):
1 2 3 4 5 6 7 8 | @Produces (MediaType.APPLICATION_JSON) public interface 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 如果接口返回的是自己定义的实体类,或者集合类等,需要在对应的实体加上下面注解:
1 2 | @XmlRootElement public class 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
测试结果:
基于rest方式的web service
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。