標籤:web service cxf maven web java
具體可以參詳我的部落格:http://www.paisays.com/?p=79
公司跨系統的介面都換成了rest風格,對於沒有使用過rest的人真是感覺茫茫大海,無從下手啊。尋找了一些資料並詢問有經驗的人,最後算是知道了基於cxf架構的rest風格的web service 怎麼用,下面我簡單介紹一下:
首先需要在web.xml檔案中進行配置:
| 123456789 |
<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檔案中需要配置:
| 12345678910111213141516 |
<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中顯示,類似命名空間。
不要忘記引入相應的標籤:
然後是介面配置(也可以寫在實作類別中):
| 12345678 |
@Produces(MediaType.APPLICATION_JSON)publicinterface ICrmTaskOrgService { @GET @Path(value ="/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 = "/matchTaskOrg/{waybillNo}") 定義這個介面的路徑,類似命名空間。{}中是url傳過來的參數。
@PathParam("waybillNo") 聲明參數引入相應的jar如果介面返回的是自己定義的實體類,或者集合類等,需要在對應的實體加上下面註解:
| 12 |
@XmlRootElementpublicclass OrgDto implements Serializable{ |
最後一步是 添加相應的maven庫
| 12345678910111213141516171819202122 |
<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