首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回fromJson的Json绑定API fromJson方法

返回fromJson的Json绑定API fromJson方法
EN

Stack Overflow用户
提问于 2020-05-21 10:50:47
回答 1查看 219关注 0票数 1

我正在尝试使用JSON-B API从文件中反序列化json。

这是代码

代码语言:javascript
复制
public List<User> getUsers(String file) {
    InputStream is = getResourceAsStream(file);
    return JsonbBuilder.create().fromJson(is, new ArrayList<User>(){}.getClass().getGenericSuperclass());
}

它如预期的那样工作。

我试图推广这个方法,而不是硬编码User,但它似乎行不通

代码语言:javascript
复制
public static <T> List<T> getFromSource(String file, Class<T> t) {
 InputStream is = getResourceAsStream(file);
 return getJsonb().fromJson(is, t.getGenericSuperclass());
}

试图调用上述方法

代码语言:javascript
复制
List<User> users = getFromSource("users.json", User.class);
User user = user.get(0);

但是,它抛出了Exception in thread "main" java.lang.ClassCastException: java.util.HashMap incompatible with User所以,看起来它是一个List<HashMap>尽管List<User>

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-21 16:43:43

在您的工作方法中,类型是:

代码语言:javascript
复制
new ArrayList<User>(){}.getClass().getGenericSuperclass()

但是,您要传递到getFromSource()方法中的内容实际上是:

代码语言:javascript
复制
User.class.getGenericSuperclass()

要解决这个问题,您需要更新传入的参数,如下所示:

代码语言:javascript
复制
List<User> users = getFromSource("users.json", new ArrayList<User>(){}.getClass());
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61932816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档