【问题标题】:Having problems getting a List of Objects back from Restful service从 Restful 服务获取对象列表时遇到问题
【发布时间】:2011-07-21 11:29:48
【问题描述】:

大家好。我已经开发了一些在 Glassfish 3.1 上运行的 REST 服务。

我有一个 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 列表。谢谢。

【问题讨论】:

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


    【解决方案1】:

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

    当然,List 中的对象仍然是 PkgLine,但对于 List,它们只是对象,您必须将每个对象强制转换为 PkgLine。不好看。

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

    【讨论】:

      【解决方案2】:

      解析一个数组呢?它具有相同的 json 表示。 你可以这样写:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-07
        • 2023-03-23
        相关资源
        最近更新 更多