Json-从Json方法返回列表<HashMap>绑定API
Json-Binding API fromJson method returning List<HashMap>
我正在尝试使用 JSON-B API
从文件中反序列化 json
这是代码
public List<User> getUsers(String file) {
InputStream is = getResourceAsStream(file);
return JsonbBuilder.create().fromJson(is, new ArrayList<User>(){}.getClass().getGenericSuperclass());
}
它按预期工作。
我试图概括这种方法而不是硬编码User
,但它似乎不起作用
public static <T> List<T> getFromSource(String file, Class<T> t) {
InputStream is = getResourceAsStream(file);
return getJsonb().fromJson(is, t.getGenericSuperclass());
}
正在尝试调用上述方法
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<User>
看起来它是 List<HashMap>
在您的工作方法中,类型是:
new ArrayList<User>(){}.getClass().getGenericSuperclass()
但是您传递给 getFromSource()
方法的内容实际上是:
User.class.getGenericSuperclass()
要解决此问题,您需要像这样更新传入的参数:
List<User> users = getFromSource("users.json", new ArrayList<User>(){}.getClass());
我正在尝试使用 JSON-B API
从文件中反序列化 json这是代码
public List<User> getUsers(String file) {
InputStream is = getResourceAsStream(file);
return JsonbBuilder.create().fromJson(is, new ArrayList<User>(){}.getClass().getGenericSuperclass());
}
它按预期工作。
我试图概括这种方法而不是硬编码User
,但它似乎不起作用
public static <T> List<T> getFromSource(String file, Class<T> t) {
InputStream is = getResourceAsStream(file);
return getJsonb().fromJson(is, t.getGenericSuperclass());
}
正在尝试调用上述方法
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<User>
List<HashMap>
在您的工作方法中,类型是:
new ArrayList<User>(){}.getClass().getGenericSuperclass()
但是您传递给 getFromSource()
方法的内容实际上是:
User.class.getGenericSuperclass()
要解决此问题,您需要像这样更新传入的参数:
List<User> users = getFromSource("users.json", new ArrayList<User>(){}.getClass());