2015-05-04 19 views
0

我試圖將以下球衣代碼轉換爲restlet。球衣版本1的restlet語法對象請求列表

WebResource webResource = client.resource("/getlistofobjects"); 
List<MyObject> thisMemberObjects = webResource 
    .accept("application/json") 
    .get(new GenericType<List<MyObject>>(){}); 

thisListOfObjects.addAll((List<MyObject>)thisMemberObjects); 

回答

0

首先,你需要創建一個註釋的接口,如下所述:

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

希望它可以幫助你, 蒂埃裏

+0

新增的代碼和現在得到: – rzeldes

+0

現在得到一個例外 - com.fasterxml.jackson.databind.JsonMappingException:無法反序列化的java.util.ArrayList的實例出來START_OBJECT的標記 at [source:[email protected]6a08;行:1,列:1] @thierry templier – rzeldes

+0

您能提供一個接收到的數據結構樣本嗎?謝謝!這將幫助我瞭解例外... –