天天看點

Restlet 2.0 邊學邊寫(七)Restlet傳回xml和json資料格式

上一次實踐實作了html form來通路Restlet的PUT和DELETE方法,但傳回資料都是string,僅能作為示範使用。本次實踐将使各方法傳回xml和json格式的資料,友善頁面、程式的讀取和展示。

[b]1.xml庫[/b]

首先是基礎的xml資料格式。Restlet的擴充包org.restlet.ext.xml.jar提供各種xml相關類庫。包中的抽象類XmlRepresentation作為父類提供接口和方法,但不能建立該父類的執行個體,而是需要使用SaxRepresentation和DomRepresentation類的執行個體來執行操作。

将Restlet安裝目錄\Edition Java EE\2.0.10\lib下的org.restlet.ext.xml.jar包加入Build Path。

[b]2.Resource[/b]

修改com.sunny.restlet.order.CustomersResource類,代碼如下:

類中将/customers資源的get和post方法傳回的Representation修改為DomRepresentation,并建立dom檔案來格式化資料。

修改com.sunny.restlet.order.CustomerResource類,代碼如下:

類中将/customer/{custId}的資源的get、put和delete方法傳回的Representation修改為DomRepresentation,并建立dom檔案來格式化資料。

[b]3.測試[/b]

部署程式後,使用浏覽器通路[url]http://localhost:8080/firstSteps/[/url],并将頁面上的五個連結在新頁面中打開通路。

在post.jsp中輸入[name=0, address=0]并送出form,可以看到提示資訊

[list]

[*]<?xml version="1.0" encoding="UTF-8"?>

[*] <customer id="0">

[*] <name>0</name>

[*] <address>0</address>

[*] </customer>

[/list]

說明調用post方法通路/customers傳回xml資料成功,資料被新增。

再次在post.jsp中輸入[name=1, address=1]并送出form,重新整理get customers"連結頁面,可以看到提示資訊

[list]

[*]<?xml version="1.0" encoding="UTF-8"?>

[*] <customers>

[*] <customer id="0">

[*] <name>0</name>

[*] <address>0</address>

[*] </customer>

[*] <customer id="1">

[*] <name>1</name>

[*] <address>1</address>

[*] </customer>

[*] </customers>

[/list]

說明調用get方法通路/customers傳回xml資料成功。

在put.jsp中輸入[id=0, name=00, address=00]并送出form,可以看到提示資訊

[list]

[*]<?xml version="1.0" encoding="UTF-8"?>

[*] <customer id="0">

[*] <name>00</name>

[*] <address>00</address>

[*] </customer>

[/list]

說明調用put方法通路/customer/{custId}傳回xml資料成功,資料被修改。

在get.jsp中輸入[id=0]并送出form,可以看到提示資訊同上。說明調用get方法通路/customer/{custId}傳回xml資料成功。

在delete.jsp中輸入[id=0]并送出form,可以看到提示資訊

[list]

[*]<?xml version="1.0" encoding="UTF-8"?>

[*] <message>success</message>

[/list]

重新整理get customers"連結頁面,可以看到提示資訊

[list]

[*]<?xml version="1.0" encoding="UTF-8"?>

[*] customers>

[*] <customer id="1">

[*] <name>1</name>

[*] <address>1</address>

[*] </customer>

[*] </customers>

[/list]

說明調用delete方法通路/customer/{custId}傳回xml資料成功,資料被删除。

[b]4.使用ClientResource測試[/b]

下面我們使用第五節中用到的ClientResource用戶端方式調用Restlet服務。

修改com.sunny.restlet.order.CustomerResource類,代碼如下:

重新部署firstSteps後,運作Test類,在控制台可以看到輸出資訊

[list]

[*]2013-1-6 16:45:29 org.restlet.engine.http.connector.HttpClientHelper start

[*]資訊: Starting the default HTTP client

[*]<?xml version="1.0" encoding="UTF-8"?><customer id="0"><name>b</name><address>b</address></customer>

[*]<?xml version="1.0" encoding="UTF-8"?><customers><customer id="0"><name>b</name><address>b</address></customer></customers>

[*]2013-1-6 16:45:29 org.restlet.engine.http.connector.HttpClientHelper start

[*]資訊: Starting the default HTTP client

[*]<?xml version="1.0" encoding="UTF-8"?><customer id="0"><name>c</name><address>c</address></customer>

[*]<?xml version="1.0" encoding="UTF-8"?><customer id="0"><name>c</name><address>c</address></customer>

[*]<?xml version="1.0" encoding="UTF-8"?><message>success</message>

[*]<?xml version="1.0" encoding="UTF-8"?><customers/>

[/list]

說明用戶端方式調用成功。

[b]5.json庫[/b]

Json作為現在通用的網際網路資料傳輸格式,Restlet當然要支援的了。Restlet的擴充包org.restlet.ext.json.jar提供各種xml相關類庫。包中的JsonRepresentation類可以作為傳回資料載體使用,其中對多種資料類型提供了支援。

将Restlet安裝目錄\Edition Java EE\2.0.10\lib下的org.restlet.ext.json.jar包和org.json.jar包加入Build Path。

[b]6.Resource[/b]

修改com.sunny.restlet.order.CustomersResource類,代碼如下:

類中将/customers資源的get和post方法傳回的Representation修改為JsonRepresentation。

修改com.sunny.restlet.order.CustomerResource類,代碼如下:

類中将/customer/{custId}的資源的get、put和delete方法傳回的Representation修改為JsonRepresentation。可以看到JsonRepresentation對各資料類型的支援。

[b]7.測試[/b]

重新部署firstSteps後,運作Test類,在控制台可以看到輸出資訊

[list]

[*]2013-1-6 17:32:20 org.restlet.engine.http.connector.HttpClientHelper start

[*]資訊: Starting the default HTTP client

[*]{"address":"b","name":"b"}

[*]{"0":"Customer [name=b, address=b]"}

[*]2013-1-6 17:32:21 org.restlet.engine.http.connector.HttpClientHelper start

[*]資訊: Starting the default HTTP client

[*]{"address":"c","name":"c"}

[*]{"address":"c","name":"c"}

[*]success

[*]{}

[/list]

說明用戶端方式調用資源,傳回json資料成功。

同樣可以通過頁面來通路修改後的程式,但是傳回會是個檔案,下載下傳打開後内容和上面的提示資訊類似。

[b]8.思考[/b]

我們也可以簡單的使用StringRepresentation來達到相同的效果,但是需要自己在代碼中調用Dom4J和JSON類庫來生成json和xml字元串,再使用StringRepresentation将結果傳回。