關於REST的JSON格式

在這裏簡單的說下CXF對REST的支持,先對REST概念說下。java

REST 是一種軟件架構模式,只是一種風格,不是像SOAP 那樣自己承載着一種消息協議,也能夠叫作REST 是基於HTTP協議的軟件架構。web

    REST 中重要的兩個概念就是資源定位和資源操做,而HTTP 協議剛好完整的提供了這兩個要點,HTTP 協議中的URI 能夠完成資源定位,GET、POST、OPTION等方法能夠完成資源操做,所以REST 徹底依賴HTTP 協議就能夠完成Web 服務,而不像SOAP 協議那樣只利用HTTP 的傳輸特性,定位與操做由SOAP 協議自身完成,也正是因爲SOAP 消息的存在,使得SOAP 笨重。你也能夠說REST 充分利用了HTTP 協議的特性,而不是像SOAP 那樣只利用了其傳輸這一特性(事實上大多數人提到HTTP 協議就只會想到它能用於數據傳輸)。spring

REST 是一種軟件架構理念,如今被移植到Web 服務上(所以不要提到REST 就立刻想到WebService,JAX-RS 只是將REST 設計風格應用到Web 服務開發),那麼在開發Web 服務上,偏於面向資源的服務適用於REST,偏於面向活動的服務。另外,REST 簡單易用,效率高,SOAP 成熟度較高,安全性較好。REST 提供的網絡服務叫作OpenAPI,它不只把HTTP 做爲傳輸協議,也做爲處理數據的工具,能夠說對HTTP 協議作了較好的詮釋,充分體現了HTTP 技術的網絡能力。目前Google、Amazon、淘寶都有基於REST 的OpenAPI 提供調用。apache

 

 

      WebService中,JAX-RS 只是將REST 設計應用到Web 服務開發.JAX-RS提供對了REST的支持編程

 

咱們先看看具體的例子json

一、接口類安全

 

 

Java代碼   收藏代碼
  1. <pre class="java" name="code">@Path("/rest_HelloWorld")  
  2. public interface Rest_HelloWorld {  
  3.   
  4.   
  5.     @GET   
  6.     @Produces (MediaType.TEXT_PLAIN)   
  7.     @Path("/say/{name}")   
  8.     public String say(@PathParam("name")String name);  
  9.       
  10.     @GET   
  11.     @Produces (MediaType.TEXT_PLAIN)   
  12.     @Path("/sayHello/{name}")   
  13.     public String sayHello(@PathParam("user")User user);  
  14.       
  15.     @GET   
  16.     @Produces ({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML})   
  17.     @Path("/getList/{id}")   
  18.     public List<User> getList(@PathParam("id")Long id);  
  19.       
  20. }</pre>  
  21.    

 

 

   CXF的Rest使用的JAX-RS規範。JAX-RS: Java API for RESTful Web Services是一個Java編程語言應用程序接口,支持按照 表象化狀態轉變 (REST)架構風格建立Web服務Web服務. JAX-RS使用了Java SE 5引入的Java 標註來簡化Web服務客戶端和服務端的開發和部署。網絡

 

JAX-RS提供了一些標註將一個資源類,一個POJOJava類,封裝爲Web資源。標註包括:架構

(1)、@Path,標註資源類或方法的相對路徑app

(2)、@GET,@PUT,@POST,@DELETE,標註方法是用的HTTP請求的類型

(3)、@Produces,標註返回的MIME媒體類型,( 註解標註,這個註解能夠包含一組字符串,默認值是*/*,它指定REST 服務的響應結果的MIME 類型,例如:application/xml、application/json、image/jpeg 等),你                     也能夠同時返回多種類型,但具體生成結果時使用哪一種格式取決於ContentType。CXF 默認返回的是JSON 字符串。

(4)、 @PathParam,@QueryParam,@HeaderParam,@CookieParam,@MatrixParam,@FormParam, 分別標註方法的參數來自於HTTP請求的不一樣位置,例如@PathParam來自於URL的路徑,@QueryParam來自於URL的查詢參 數,@HeaderParam來自於HTTP請求的頭信息,@CookieParam來自於HTTP請求的Cookie。

 

 

注意:前兩章說的CXF與spring整合及  都是使用JAX-WS規範。JAX-WS規範是一組XML web services的JAVA API。jaxws 是配置SOAP 方式的Web 服務

 

 

Spring中引入了兩個新的名稱空間jaxws、jaxrs,由於CXF 實現了Spring 的NamespaceHandler 接口,實現這個接口能夠在Spring 中增長額外的配置。那麼jaxws 天然是配置SOAP 方式的Web 服務,你能夠看到有jaxws:server、jaxws:endpoint、jaxws:client 三個元素,jaxws:server 和jaxws:endpoint 是等效的,都用於發佈Web 服務,出現jaxws:endpoint 的緣由是JAX-WS 規範中使用EndPoint 發佈Web 服務(前面使用過這種

方式),CXF 爲了和JAX-WS 對應,提供了這個與jaxws:server 功能同樣的配置元素;

jaxrs是REST 方式的Web 服務,有jaxrs:server、jaxrs:client 兩個元素。

 

二、接口實現類

 

 

Java代碼   收藏代碼
  1. @Service("rest_HelloWorldImpl")  
  2. public class Rest_HelloWorldImpl implements Rest_HelloWorld {  
  3.   
  4.     public String say(String name) {  
  5.             return name+",您好!";  
  6.     }  
  7.   
  8.     public String sayHello(User user) {  
  9.         return user.getName()+",您好!";  
  10.     }  
  11.       
  12.     public List<User> getList(Long id){  
  13.         List<User> list = new ArrayList<User>();  
  14.           
  15.         Long sid=1L;  
  16.         User user = new User(sid,"張三"+sid,21);  
  17.         list.add(user);  
  18.           
  19.         sid=2L;  
  20.         user = new User(sid,"張三"+sid,21);  
  21.         list.add(user);  
  22.           
  23.         sid=3L;  
  24.         user = new User(sid,"張三"+sid,21);  
  25.         list.add(user);  
  26.         return list;  
  27.     }  
  28. }  

 

 

三、CXF在Spring中的配置

 

 

Java代碼   收藏代碼
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xmlns:jaxws="http://cxf.apache.org/jaxws"  
  5.     xmlns:jaxrs="http://cxf.apache.org/jaxrs"  
  6.     xsi:schemaLocation=" http://www.springframework.org/schema/beans                       
  7.                     http://www.springframework.org/schema/beans/spring-beans.xsd                         
  8.                     http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd  
  9.                     http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd">  
  10.     <import resource="classpath:META-INF/cxf/cxf.xml" />  
  11.     <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />  
  12.     <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />  
  13.       
  14.   
  15.     <bean id="inMessageInterceptor" class="org.apache.cxf.interceptor.LoggingInInterceptor" />  
  16.     <bean id="outMessageInterceptor" class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>  
  17.   
  18.    <!--id:名稱(隨意配),implementor:指定接口具體實現類,address:隨意配-->  
  19.     <jaxws:endpoint id="helloWorld"  implementor="#HelloWorldImpl" address="/HelloWorld"  >  
  20.         <!-- 輸入日誌攔截器 -->  
  21.        <jaxws:inInterceptors>  
  22.             <ref bean="inMessageInterceptor"/>  
  23.        </jaxws:inInterceptors>  
  24.        <!-- 輸出日誌攔截器 -->  
  25.        <jaxws:outInterceptors>  
  26.           <ref bean="outMessageInterceptor"/>  
  27.        </jaxws:outInterceptors>  
  28.        <jaxws:properties>  
  29.           <entry key="mtom_enabled" value="true"></entry>  
  30.        </jaxws:properties>  
  31.     </jaxws:endpoint>  
  32.       
  33.     <jaxrs:server id="rest_HelloWorld" address="/">  
  34.         <jaxrs:inInterceptors>  
  35.            <ref bean="inMessageInterceptor"/>  
  36.         </jaxrs:inInterceptors>  
  37.         <jaxrs:outInterceptors>  
  38.             <ref bean="outMessageInterceptor"/>  
  39.         </jaxrs:outInterceptors>  
  40.         <jaxrs:serviceBeans>  
  41.             <ref bean="rest_HelloWorldImpl" />  
  42.         </jaxrs:serviceBeans>  
  43.         <jaxrs:extensionMappings>  
  44.             <entry key="json" value="application/json" />  
  45.             <entry key="xml" value="application/xml" />  
  46.         </jaxrs:extensionMappings>  
  47.         <jaxrs:languageMappings>  
  48.             <entry key="en" value="en-gb" />  
  49.         </jaxrs:languageMappings>  
  50.     </jaxrs:server>  
  51.   
  52.     <!-- WebService 客戶端 spring 配置文件cxf與Spring集成,cxf裏提供了一個工廠類org.apache.cxf.jaxws.JaxWsProxyFactoryBean,  
  53.     能夠方便實現的調用WebService。serviceClass屬性是接口類,address是webService的路徑在其餘bean裏若是要調用webservice,  
  54.     只要將client這個bean注入到須要使用的bean裏。-->  
  55.     <bean id="client" class="com.exp.service.outer.HelloWorld" factory-bean="clientFactory" factory-method="create" />  
  56.     <bean id="clientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">  
  57.         <property name="serviceClass" value="com.exp.service.outer.HelloWorld" />  
  58.         <property name="address" value="http://localhost:8080/demo/webservice/HelloWorld" />  
  59.     </bean>  
  60. </beans>  

 

 

 

注意:如下代碼是新增長代碼

      xmlns:jaxrs="http://cxf.apache.org/jaxrs"

 

       http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd

 

 

Java代碼   收藏代碼
  1. <jaxrs:server id="rest_HelloWorld" address="/">  
  2.         <jaxrs:inInterceptors>  
  3.            <ref bean="inMessageInterceptor"/>  
  4.         </jaxrs:inInterceptors>  
  5.         <jaxrs:outInterceptors>  
  6.             <ref bean="outMessageInterceptor"/>  
  7.         </jaxrs:outInterceptors>  
  8.         <jaxrs:serviceBeans>  
  9.             <ref bean="rest_HelloWorldImpl" />  
  10.         </jaxrs:serviceBeans>  
  11.         <jaxrs:extensionMappings>  
  12.             <entry key="json" value="application/json" />  
  13.             <entry key="xml" value="application/xml" />  
  14.         </jaxrs:extensionMappings>  
  15.         <jaxrs:languageMappings>  
  16.             <entry key="en" value="en-gb" />  
  17.         </jaxrs:languageMappings>  
  18.     </jaxrs:server>  

 

 

四、訪問

    http://localhost:8080/demo/webservice/rest_HelloWorld/getList/1

 

返回JSON格式: http://localhost:8080/demo/webservice/rest_HelloWorld/getList/1?_type=json

返回XML格式: http://localhost:8080/demo/webservice/rest_HelloWorld/getList/1?_type=xml

 

獲得結果

 

Java代碼   收藏代碼
    1. <Users>  
    2. <User>  
    3. <id>1</id>  
    4. <name>張三1</name>  
    5. <age>21</age>  
    6. </User>  
    7. <User>  
    8. <id>2</id>  
    9. <name>張三2</name>  
    10. <age>21</age>  
    11. </User>  
    12. <User>  
    13. <id>3</id>  
    14. <name>張三3</name>  
    15. <age>21</age>  
    16. </User>  
    17. </Users> 
相關文章
相關標籤/搜索