1. 程式人生 > >使用apach cxf+spring+tomcat搭建提供json格式的對外介面入門Demo

使用apach cxf+spring+tomcat搭建提供json格式的對外介面入門Demo

apache cxf是一款可提供webservice服務的輕量級框架。主要格式有xml和json。下面就以apache cxf和spring以及tomcat框架為基礎,搭建一個簡單的對外提供json格式的介面服務。

下面就開始快樂的學習之旅吧!

由於apache cxf是基於servlet技術的SOA應用框架,所以當然第一件事情就是配置web.xml了。

<web-app>
<display-name>application</display-name>

<!--由於spring也需要進行啟動,所以順帶也進行了配置。下面制定了的spring配置檔案位置-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:com/resources/spring-context.xml</param-value>
</context-param>

<!-- 預設的spring配置檔案是在WEB-INF下的applicationContext.xml,下面這個是上下文載入器,用於初始化spring容器-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!--下面定義了cxfServlet以及載入的順序-->
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<!--定義訪問cxf提供的服務時,servlet所做的對映-->
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>

<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

上面就把spring容器和cxf框架在servlet容器(此處用tomact)中定義好了。

下面就開始寫介面服務了。先上我的專案結構圖,如下圖所示。


其中介面CxfTestService.java內容如下所示:

//@path指定訪問的路徑,這個註釋是由jsr.jar來提供,下面的@GET註釋也是由該jar包來提供,除此之外還提供了@POST(以post進行訪問),@QueryParam(用於介面引數宣告),@FormParam(用於介面引數宣告,如果訪問用post方式進行,則若介面方法有引數則可以用該註釋申明)等註釋。

@Path("/test")
public interface CxfTestService {

@GET
@Path("/init")
public ResultDomain init();
}

上面用註釋的方法把介面定義好了,當然也可以選擇程式碼的方式進行宣告,本文還是同一採用註釋的方式(ps:本人習慣用註釋的方式了)。

下面就來看介面實現類CxfTestService.java吧。下面上程式碼:

public class CxfTestServiceImpl implements CxfTestService{
public ResultDomain init() {
ResultDomain domain = new ResultDomain();
domain.setCode(1);
domain.setResult("成功了");
domain.setResultDesc("操作成功");
return domain;
}
}

大家不要罵我,就是一個用於測試的方法而已,和普通方法完全沒區別,但注意了,我們進入這個方法返回ResultDomain去看一下有什麼不同吧。

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class ResultDomain {
public String resultDesc;
public Integer code;
public Object result;

從上面可以看到,該實體類也進行了註釋申明。因為cxf使用jaxb進行資料繫結時,要知道對應實體的屬性,所以要將類申明為@XmlRootElement。這樣jaxb才知道類裡面有什麼屬性。而@XmlAccessorType(XmlAccessType.FIELD)則指定 JAXB 繫結類中的每個非靜態、非瞬態欄位將會自動繫結到 XML。

搞定了上面兩塊東西,下面就剩最後一塊內容了,那就是spring容器和cxf的整合。本配置內容放在spring-cxf-out.xml檔案中。上配置檔案:

<!--下面這塊dtd,xsd我就不解釋了,就是配置的規範約束-->

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:jaxrs="http://cxf.apache.org/jaxrs"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
http://cxf.apache.org/transports/http/configuration
http://cxf.apache.org/schemas/configuration/http-conf.xsd">
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />

    <!--生成一個cxfTestService例項物件-->
    <bean id="cxfTestService" class="com.cxf.webService.impl.CxfTestServiceImpl" />

    <bean id="securityExceptionMapper" class="com.cxf.webService.impl.CxfTestServiceImpl" />
    

<!--指定返回的json的格式,可以安裝字面理解-->

<bean id="jsonProvider" class="org.apache.cxf.jaxrs.provider.json.JSONProvider">

<!--忽視名稱空間-->
<property name="ignoreNamespaces" value="true" />

<!--忽略根節點-->

<property name="dropRootElement" value="true" />

<!--若返回結果是集合,則這個配置為true和false影響到集合內屬性的括號問題,若為true,json格式大概是[{}],而反之則是{{}},第一種格式是用gson可以解析的,而第二種是gson無法解析的-->

<property name="dropCollectionWrapperElement" value="true" />

<!--結合的序列化-->
<property name="serializeAsArray" value="true" />
</bean>

<!--用jaxrs來宣告服務,ps:spring容器中提供了jaxrs和jaxws來發布cxf服務-->
<jaxrs:server id="cxfServices" address="/">
<jaxrs:serviceBeans>

<!--這裡就是將定義好的服務-->
<ref bean="cxfTestService" />
</jaxrs:serviceBeans>
<jaxrs:providers>
<ref bean="jsonProvider" />
</jaxrs:providers>
</jaxrs:server>
</beans>

好了,到此為止一個簡易的對外提供json格式的服務已經搭好了,下面就開啟服務進行訪問吧!看下圖所示,就可已用get方式來訪問該介面服務並返回json格式的結果了。


資源下載地址:

http://download.csdn.net/detail/shihai1991/8021127

參考博文:

http://cxf.apache.org/docs/index.html

http://www.ibm.com/developerworks/cn/education/java/j-cxf/

相關推薦

使用apach cxf+spring+tomcat搭建提供json格式對外介面入門Demo

apache cxf是一款可提供webservice服務的輕量級框架。主要格式有xml和json。下面就以apache cxf和spring以及tomcat框架為基礎,搭建一個簡單的對外提供json格式的介面服務。 下面就開始快樂的學習之旅吧! 由於apache cxf是基

Spring MVC 前後臺傳遞json格式數據 Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported

support style logs ica spring enc json格式數據 分享 技術 報錯如下: Content type ‘application/x-www-form-urlencoded;charset=UTF-8‘ not supported

Spring MVC 學習筆記 json格式的輸入和輸出

                Spring mvc處理json需要使用jackson的類庫,因此為支援json格式的輸入輸出需要先修改pom.xml增加jackson包的引用        <!-- json -->        <dependency>            &l

springmvc搭建返回json格式的restful api

目標:實現如下的restful api,返回格式為json /blog/100 HTTP GET =>  得到id = 100的blog /blog/100 HTTP DELETE => 刪除 id = 100的blog /blog/100 HTTP PUT =

Spring mvc + jackson2 返回json格式(包含日期格式解析)

寫了那麼多,發現白忙活了一場,原來jackson也有一個@JsonFormat註解,將它配置到Date型別的get方法上後,jackson就會按照配置的格式轉換日期型別,而不自定義轉換器類,欲哭無淚啊。辛苦了那麼多,其實別人早已提供,只是沒有發現而已。 不說了,直接上方

maven+CXF+Spring+tomcat 開發webservice

<servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-

自定義統一api返回json格式(app後臺框架搭建三)

pub ble ace proc 2.3 resp think err ons 在統一json自定義格式的方式有多種:1,[email protected]/* */,2,自定義一個註解,自己去解析對象成為json字符串進行返回 第一種方式,我就不推薦,想弄得的

Tomcat搭建web,提供JAVA頁面訪問!

內容 apache coyote 算法 alias store reads accep ase 二.配置tomcat(嚴格區分大小寫)虛擬主機,實現搭建多web1.修改配置文件vim /usr/local/tomcat/conf/server.xml<Host nam

Spring Boot 接口 返回json格式數據

turn div boot 格式 style ESS ping msg 返回json @ResponseBody //必須添加此註解 @RequestMapping("/emPower") public String emPowers(@RequestBody Objec

Spring Cloud Spring Boot mybatis分布式微服務雲架構 返回JSON格式

and tostring restful app localhost 類型 不同 本質 應用 在上述例子中,通過@ControllerAdvice統一定義不同Exception映射到不同錯誤處理頁面。而當我們要實現RESTful API時,返回的錯誤是JSON格式的數據,而

Spring日記_02之 json、javaBean、.do、MySql、MyBatis 環境搭建結束

JSON Json是JavaScript直接量語法   無參構造方法直接 Alt + \ 就可以提示新增 Project – Clean 瀏覽器向伺服器傳送請求,伺服器中的Spring中的SpringMVC將Json字串傳送到客戶端瀏覽器,瀏覽器的jquery解析JSON字串成為J

cxf實體物件返回JSON格式

<bean id="jsonProvider" class="org.codehaus.jackson.jaxrs.JacksonJsonProvider"/> <jaxrs:server id="customerService" address="/sso">

Spring Cloud Config官方文件》之提供替代格式

原文連結 6. 提供替代格式 來自環境節點的預設JSON格式非常適合Spring應用程式使用,因為它直接對映到 Environment抽象。如果您願意,您可以通過向資源路徑(“.yml”,“.yaml”或“.properties”)新增字尾來使用與YAML或Java屬性相同的資料。對於那些不關

springboot全域性異常處理(包含404錯誤處理) 一:解決spring boot中rest介面404,500等錯誤返回統一的json格式(備用地址) 二:SpringBoot入門——區域性與全域性的異常處理(備用地址)

個人整理參考文件: 一:解決spring boot中rest介面404,500等錯誤返回統一的json格式(備用地址) 二:SpringBoot入門——區域性與全域性的異常處理(備用地址) 三:SpringBoot全域性異常處理(備用地址) 四:sprin

解決spring boot中rest介面404,500等錯誤返回統一的json格式

在開發rest介面時,我們往往會定義統一的返回格式,列如: { "status": true, "code": 200, "message": null, "data": [ { "id": "101", "name": "jack" },

Spring Boot系列(三):Spring Boot轉化為json資料格式

Spring Boot為我們良好的提供了我們需要的資料,將資料轉化為json格式,然後返回, 下面請看springboot轉化為json的方式; 第一種方式: SpringBoot框架預設的方式; 步驟: * 1.編寫實體類student; package com.gmm

Nginx+Tomcat搭建叢集,Spring Session+Redis實現Session共享

小夥伴們好久不見!最近略忙,部落格寫的有點少,嗯,要加把勁。OK,今天給大家帶來一個JavaWeb中常用的架構搭建,即Nginx+Tomcat搭建服務叢集,然後通過Spring Session+Redis實現Session共享。 閱讀本文需要有如下知識點:

Spring使用@ResponseBody註解返回json格式(一般將其包裝成一個物件)的資料

使用@ResponseBody資料,返回Json資料(Restful風格)出現錯誤原因: 報406錯誤,百分之九十是沒有新增json的依賴包    解決辦法:     報404錯誤,找不到請求的路徑(請求路徑不對) 報406錯誤,百分之十是攔截請求不正確   

Spring從Request中獲取Json格式的資料

第一種方法,獲取post請求傳送的Json資料 public static String JsonReq(HttpServletRequest request) { BufferedReader br; StringBuilder sb = null; Stri

Spring MVC接受JSON格式的資料

前端部分: index.jsp <%@ page language="java"contentType="text/html; charset=UTF-8"pageEncoding=