我有一个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列表。感谢。
答案 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);