我正在尝试将以下球衣代码转换为restlet。
WebResource webResource = client.resource("/getlistofobjects");
List<MyObject> thisMemberObjects = webResource
.accept("application/json")
.get(new GenericType<List<MyObject>>(){});
thisListOfObjects.addAll((List<MyObject>)thisMemberObjects);
答案 0 :(得分:0)
首先,您需要创建一个带注释的界面,如下所述:
public interface MyService {
@Get
List<MyObject> getObjs();
}
然后你可以根据这个接口利用类ClientResource
中的Restlet转换器,代码如下:
ClientResource cr = new ClientResource("http://.../getlistofobjects");
cr.accept(MediaType.APPLICATION_JSON);
MyService myService = cr.wrap(MyService.class);
List<MyObject> objs = myService.getObjs();
不要忘记在类路径中添加扩展org.restlet.ext.jackson
,它会自动将JSON内容转换为Java对象。
这是一个示例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"
}
]
}
您需要拥有以下bean:
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();
}
您可以注意到,您可以使用Jackson更新响应反序列化以支持对象列表作为方法getObjs
的返回。对于此类用例,您需要注册自定义反序列化程序。这个答案可以给你一些有趣的提示:Restlet Complex Object to XML serializaton。
希望它可以帮到你, 亨利