jersey 版本 1 请求对象列表的 restlet 语法
restlet syntax for jersey version 1 request list of objects
我正在尝试将以下球衣代码转换为 restlet。
WebResource webResource = client.resource("/getlistofobjects");
List<MyObject> thisMemberObjects = webResource
.accept("application/json")
.get(new GenericType<List<MyObject>>(){});
thisListOfObjects.addAll((List<MyObject>)thisMemberObjects);
首先你需要创建一个带注解的界面,如下所述:
public interface MyService {
@Get
List<MyObject> getObjs();
}
然后您可以基于此接口利用 class ClientResource
中的 Restlet 转换器,代码如下:
ClientResource cr = new ClientResource("http://.../getlistofobjects");
cr.accept(MediaType.APPLICATION_JSON);
MyService myService = cr.wrap(MyService.class);
List<MyObject> objs = myService.getObjs();
不要忘记在您的 class 路径中添加扩展 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
的 return。对于此类用例,您需要注册一个自定义反序列化器。这个答案可以给你一些有趣的提示:Restlet Complex Object to XML serializaton。
希望对你有帮助,
蒂埃里
我正在尝试将以下球衣代码转换为 restlet。
WebResource webResource = client.resource("/getlistofobjects");
List<MyObject> thisMemberObjects = webResource
.accept("application/json")
.get(new GenericType<List<MyObject>>(){});
thisListOfObjects.addAll((List<MyObject>)thisMemberObjects);
首先你需要创建一个带注解的界面,如下所述:
public interface MyService {
@Get
List<MyObject> getObjs();
}
然后您可以基于此接口利用 class ClientResource
中的 Restlet 转换器,代码如下:
ClientResource cr = new ClientResource("http://.../getlistofobjects");
cr.accept(MediaType.APPLICATION_JSON);
MyService myService = cr.wrap(MyService.class);
List<MyObject> objs = myService.getObjs();
不要忘记在您的 class 路径中添加扩展 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
的 return。对于此类用例,您需要注册一个自定义反序列化器。这个答案可以给你一些有趣的提示:Restlet Complex Object to XML serializaton。
希望对你有帮助, 蒂埃里