首先,你需要創建一個註釋的接口,如下所述:
ClientResource cr = new ClientResource("http://.../getlistofobjects");
cr.accept(MediaType.APPLICATION_JSON);
MyService myService = cr.wrap(MyService.class);
List<MyObject> objs = myService.getObjs();
:
public interface MyService {
@Get
List<MyObject> getObjs();
}
然後你就可以根據與代碼這個接口這樣從ClientResource
類利用的Restlet轉換器
不要忘記在類路徑中添加將自動將JSON內容轉換爲Java對象的擴展org.restlet.ext.jackson
。
這裏的樣本pom.xml
文件:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.restlet</groupId>
<artifactId>test.restlet.client</artifactId>
<name>${project.artifactId}</name>
<packaging>jar</packaging>
<version>1.0.0-snapshot</version>
<properties>
<java-version>1.7</java-version>
<restlet-version>2.3.1</restlet-version>
</properties>
<dependencies>
<dependency>
<groupId>org.restlet.jse</groupId>
<artifactId>org.restlet</artifactId>
<version>${restlet-version}</version>
</dependency>
<dependency>
<groupId>org.restlet.jse</groupId>
<artifactId>org.restlet.ext.jackson</artifactId>
<version>${restlet-version}</version>
</dependency>
<dependency>
<groupId>org.restlet.jse</groupId>
<artifactId>org.restlet.ext.httpclient</artifactId>
<version>${restlet-version}</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>maven-restlet</id>
<name>Public online Restlet repository</name>
<url>http://maven.restlet.com</url>
</repository>
</repositories>
</project>
編輯
對於以下響應有效載荷:
{
"elitFileBasic": [
{
"application":"$TRACKING",
"fileName":"FILE.TRACKING.DATA"
},
{
"application":"$TRACKING$",
"fileName":"TRACKING.EVENT.5"
}
]
}
您需要具備以下豆:
public class ResponseBean {
private List<ResponseElementBean> elitFileBasic;
public List<ResponseElementBean> getElitFileBasic() {
return this.elitFileBasic;
}
public void setElitFileBasic(List<ResponseElementBean> elitFileBasic) {
this.elitFileBasic = elitFileBasic;
}
}
public class ResponseElementBean {
private String application;
private fileName;
// Getters and setters
(...)
}
在這種情況下,註釋的接口將是:
public interface MyService {
@Get
ResponseBean getObjs();
}
你可以注意到,您可以更新傑克遜響應反序列化來支持對象的列表作爲方法getObjs
的回報。對於這種用例,您需要註冊一個自定義解串器。這個答案可以給你一些有趣的提示:Restlet Complex Object to XML serializaton。
希望它可以幫助你, 蒂埃裏
新增的代碼和現在得到: – rzeldes
現在得到一個例外 - com.fasterxml.jackson.databind.JsonMappingException:無法反序列化的java.util.ArrayList的實例出來START_OBJECT的標記 at [source:[email protected]6a08;行:1,列:1] @thierry templier – rzeldes
您能提供一個接收到的數據結構樣本嗎?謝謝!這將幫助我瞭解例外... –