gpt4 book ai didi

java - 使用通用的 GenericEntity

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:13:21 25 4
gpt4 key购买 nike

我有几个客户端类通过 PUT 方法将 bean 列表发送到 jersey web 服务,因此我决定使用泛型将它们重构为一个类。我的第一次尝试是这样的:

public void sendAll(T list,String webresource) throws ClientHandlerException {
WebResource ws = getWebResource(webresource);
String response = ws.put(String.class, new GenericEntity<T>(list) {});
}

但是当我调用它时:

WsClient<List<SystemInfo>> genclient = new WsClient<List<SystemInfo>>();
genclient.sendAll(systemInfoList, "/services/systemInfo");

它给我这个错误:

com.sun.jersey.api.client.ClientHandlerException: A message body writer for Java type, class java.util.ArrayList, and MIME media type, application/xml, was not found

所以我尝试取出 GenericEntity 声明的方法,它起作用了:

public void sendAll(T list,String webresource) throws ClientHandlerException {
WebResource ws = ws = getWebResource(webresource);
String response = ws.put(String.class, list);
}

调用方式:

 WsClient<GenericEntity<List<SystemInfo>>> genclient = new WsClient<GenericEntity<List<SystemInfo>>>();
GenericEntity<List<SystemInfo>> entity;
entity = new GenericEntity<List<SystemInfo>>(systemInfoList) {};
genclient.sendAll(entity, "/services/systemInfo");

那么,为什么我不能在类内部生成泛型类型的泛型实体,而在类外生成呢?

最佳答案

类 GenericEntity 用于绕过 Java 的类型删除。在创建 GenericEntity 实例的那一刻,Jersey 尝试获取类型信息。

在第一个示例中,使用参数 list 调用了 GenericEntity 构造函数类型 T ,在第二个示例中,它使用参数 systemInfoList 调用,这似乎提供了更好的类型信息。我不知道 GenericEntity 构造函数在内部做什么,但由于 Java 的类型删除,这两种情况似乎有所不同。

尝试绕过类型删除是不明智的,因为这些解决方案通常不起作用。你可以责怪 Jersey 的尝试(或者责怪 Sun/Oracle 的类型删除)。

关于java - 使用通用的 GenericEntity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10684623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com