gpt4 book ai didi

java - 通用反序列化的 Gson 类型 token 问题

转载 作者:搜寻专家 更新时间:2023-10-30 23:02:47 26 4
gpt4 key购买 nike

我发现了很多类似的问题,但没有一个有帮助。

这个有效:

public class Assets<T> {

public T getAndDeserializeAsset(String endpoint, String assetId, Client client){
Response response = client.get(endpoint+assetId);
Gson gson = new Gson();
T asset = gson.fromJson(response.body, new TypeToken<Email>(){}.getType());
return asset;
}

这不是:

public class Assets<T> {

public T getAndDeserializeAsset(String endpoint, String assetId, Client client){
Response response = client.get(endpoint+assetId);
Gson gson = new Gson();
T asset = gson.fromJson(response.body, new TypeToken<T>(){}.getType());
return asset;
}

我是按照官方文档做的,不知道为什么不行。

错误:

Exception in thread "main" java.lang.ClassCastException: com.rest.api.Response cannot be cast to model.Email
at main.Main.main(Main.java:34)

最佳答案

唯一有意义的是你的 Assets<T> 实例必须是 Assets<Response> 的实例, 不属于 Assets<Email> .您绝对确定您的 Assets 实例吗?是正确的类型吗?

此外,请记住Gson 不是协变的;当您使用 TypeToken 指定类型时,您必须使用您希望反序列化的确切类型。例如,如果您使用类定义:

class Email extends Response {

然后使用:

new Assets<Response>();

因为 Gson 不是协变的,所以无法知道您真正想要的是 Email .

关于java - 通用反序列化的 Gson 类型 token 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30079933/

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