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

希望对你有帮助, 蒂埃里