gpt4 book ai didi

java - Gson 解析响应以获取泛型类

转载 作者:行者123 更新时间:2023-11-30 10:12:35 25 4
gpt4 key购买 nike

我有一个响应类

public class ResponseModel<T> {
private boolean isRequestSuccessful;

public boolean getIsRequestSuccessful() {
return this.isRequestSuccessful;
}

public void setIsRequestSuccessful(boolean isRequestSuccessful) {
this.isRequestSuccessful = isRequestSuccessful;
}

private String message;

public String getMessage() {
return this.message;
}

public void setMessage(String message) {
this.message = message;
}

private T object;

public T getObject() {
return this.object;
}

public void setObject(T object) {
this.object = object;
}
}

我的 API 将返回类型 T。我想解析来自 API 的响应并创建一个 ResponseModel 类型的对象。

我正在尝试实现类似下面的内容,我可以使用 C# 轻松完成。请帮助了解如何使用 Java 执行此操作

public static ResponseModel<T> Get(String requestUri) throws ClientProtocolException,IOException {
CloseableHttpClient client = HttpClientBuilder.create().build();
HttpGet httpGet = new HttpGet(requestUri);
httpGet.addHeader("TenantKey", TenantKey);
httpGet.addHeader("accept", "application/json");
HttpResponse response = client.execute(httpGet);

ResponseModel<T> responseModel = new ResponseModel<T>();

if (response.getStatusLine().getStatusCode() == 200) {
Gson gson = new GsonBuilder().create();
// parse the response as T and and assign to object of ResponseModel
responseModel.object = ...
}
else
{
responseModel.message = response.getEntity().getContent();
}
// return ResponseModel here
}

最佳答案

C# 和 Java 中的泛型非常不同。简单地说,你在这里做什么是没有意义的。

您正在使用的 java 泛型 T 有一个编译 时间特性。它允许您在编译 时使用更具体的类型,而不是使用 Object到处都是。

因此,您不能像您希望的那样在“运行时”使用泛型来确定“T”。您方法中的 T 来自“外部”,编译器 确定它有时应该是 ResponseModel<Integer>。和 ResponseModel<Whatever>在另一个上下文中。

您不能让 gson 读取 JSON 数据以返回特定的 ResponseModel<Whatever>为你。如果有的话,您也许可以使用 TypeAdapter magic根据实际值进行一些切换,返回这个或那个特定 ResponseModel<Foo> .

除此之外:当使用类似 bean 的类作为您的 ResponseModel 时,您只希望它们是特定的,而不是通用的。

关于java - Gson 解析响应以获取泛型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51817081/

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