从Restful服务获取对象列表时遇到问题

时间:2011-03-23 16:28:09

标签: web-services generics rest jersey java-ee-6

嘿伙计们。我在REST中开发了一些在Glassfish 3.1上运行的服务。

我有一个Java SE应用程序,我使用Jersey作为客户端api。

 public <T> T findAll_JSON(Class<T> responseType) throws UniformInterfaceException {
    WebResource resource = webResource;
    return resource.accept(MediaType.APPLICATION_JSON).get(responseType);
}

这是Netbeans生成的客户端代码。

我的主要问题是将对象列表作为响应类型传递

这是客户端代码。

   List<PkgLine> pkgLine = service.findAll_JSON(List.class);        
    System.out.println(pkgLine.get(5).getLineStatus());          
    service.close();

显然这不起作用,因为响应需要是PkgLine列表。我如何将其作为通用传递?我的服务设置为返回PkgLine列表。感谢。

2 个答案:

答案 0 :(得分:2)

问题是“擦除”。您可以在程序中声明List<PkgLine>,但在运行时,列表中的对象是PkgLines的信息将被删除。 List<String>List<PkgLine>List<Object>在运行时都是相同的类型。 (这就是为什么会这样的原因;我不会在这里解释,但如果你有兴趣,你可以查看“擦除”。)

列表中的对象当然仍然是PkgLines,但是对于List它们只是对象,你必须将每个对象转换为PkgLine。它不漂亮。

List<?> pkgLine = service.findAll_JSON(List.class);
System.out.println(((PkgLine)(pkgLine.get(5))).getLineStatus());
service.close();

答案 1 :(得分:1)

解析数组怎么样?它具有相同的json represantation。 你可以这样写:

resource.accept(MediaType.APPLICATION_JSON).get(PkgLine[].class);