jersey版本1请求对象列表的restlet语法

时间:2015-05-04 15:52:29

标签: java jersey restlet

我正在尝试将以下球衣代码转换为restlet。

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

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

1 个答案:

答案 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

希望它可以帮到你, 亨利