2014-12-22 29 views
0

有沒有一個很好的教程(或問題和答案)來說明如何用符號創建自定義RESTLET請求和/或響應實體Java對象?如何使用記號創建自定義客戶端RESTLET請求和/或響應實體Java對象?

我有一個RESTLET服務器應用程序,它具有定義好的方法(即GET,PUT,POST等)和響應。我想寫一個連接到它的Java客戶端代碼片段,如果可能的話,使用JSON註釋來解析RESTLET客戶端的RESTLET請求和響應。到目前爲止,我在網上找到的所有東西都是關於編寫RESTLET服務的,而不是關於客戶端的。

我已經能夠使用「org.restlet.resource.ClientResource」作爲連接器客戶端來連接到URL並解析出響應。但我想要一個更通用的方式來使用Java POJO對象來執行此操作,該POJO對象使用@notations(即@GET @POST)定義的方法和對象來發送和接收客戶端的請求和響應。

我有類似現在這種權利的內容:

ClientResource clientResource = new ClientResource(url); 

Request request = new Request(Method.POST, url); 

clientResource.setRequest(request); 
Form form = new Form(); 

form.set("foo", "barValue"); 

org.restlet.representation.Representation response = clientResource.post(form, MediaType.APPLICATION_JSON); 
Representation responseEntity = clientResource.getResponseEntity(); 

JsonRepresentation jsonRepresentation = new JsonRepresentation(responseEntity); 

JSONObject jsonObject = jsonRepresentation.getJsonObject(); 
String[] names = JSONObject.getNames(jsonObject); 

if (jsonObject.has("errorString")) 
{ 
    String error = jsonObject.optString("errorString"); 
} 

回答

0

我認爲你尋找的是轉換器的概念。後者在客戶端和服務器端均得到支持,旨在將表示轉換爲POJO。您可以注意到您需要使用ClientResource來利用此功能。

你可以看看擴展org.restlet.extract.jackson中的Jackson。這將幫助你實現你自己的一個。

希望它會幫助!

+0

那麼,Jackson是一個需要單獨安裝和使用的框架/ .jar嗎? RESTLET框架有什麼特有的功能嗎? – atom88

+0

是的,傑克遜需要在你的班級路徑中。實際上,Restlet提供了用於表示數據轉換的通用框架,但通常會將實際轉換委託給第三方工具。事實上,我不確定要正確理解你的問題。你想在客戶端使用Restlet註釋嗎?如果是這樣,則必須使用帶有ClientResource類的方法包裝的帶註釋的接口。如果這是你需要的,我會發佈一個新的和詳細的答案你的問題... –

0

如果你想使用的Restlet註解的接口,您只需定義接口,如下所述:

public TestResource { 
    @Get 
    List<Element> getElements(); 
    @Post 
    Element addElement(Element element); 
} 

這相當於有一個服務器資源的HTTP方法GET和POST和處理的數據結構相同作爲Element類的結構(不管使用的技術是:JSON,XML,YAML等)。

例如:

public class Element { 
    private String id; 
    private String name; 
    private int age; 
    // Setters and getters 
(...) 
} 

相應的內容:

{ 
    "id": "myid", 
    "name": "myname", 
    "age": 35 
} 

該接口可以在類ClientResource與方法渦卷內使用,如下所述:

ClientResource cr = new ClientResource("http://(...)/myresource"); 
ElementResource resource = cr.wrap(ElementResource.class); 
// GET 
List<Element> elements = resource.getElements(); 
// POST 
Element newElement = new Element(); 
newElement.setId("..."); 
(...) 
Element addedElement = resource.addElement(newElement); 

您可以注意到表示數據/ POJO在Restlet的引擎下完成。所以你需要有一個擴展來做到這一點。例如,擴展org.resdtlet.ext.jackson以使用Jackson for JSON或XML或YAML。

希望它有幫助。 Thierry

相關問題