【发布时间】:2014-08-05 16:08:49
【问题描述】:
当我在泛型方法中有一个列表时,Gson 返回一个 Object 列表而不是泛型类型列表。 我见过很多没有解决方案的线程,如果我不使用泛型方法将不得不为每个bean创建一个方法。
有没有人知道我该怎么做才能解决它?
PS:一段时间以来,我已经在列表中创建了循环以逐个实体地序列化实体,拆分返回的字符串并逐个实体地反序列化实体,但显然这是一种解决方法
创建一个通用列表并序列化为 JSON(这是一种网络服务方法):
public String listEntity(String nomeClasse) throws WsException {
// Identifying the entity class
Class<?> clazz = Class.forName(nomeClasse);
// Querying with Hibernate
List<?> lst = getDao().listEntity(clazz);
// Check if is null
if (lst == null) {
return "[]";
}
return gson.toJson(lst);
}
使用Webservice方法:
public <T> List<T> listEntity(Class<T> clazz)
throws WsIntegracaoException {
try {
// Consuming remote method
String strJson = getService().listEntity(clazz.getName());
Type type = new TypeToken<List<T>>() {}.getType();
// HERE IS THE PROBLEM
List<T> lst = GSON.fromJson(strJson, type);
// RETURNS IS A LIST OF OBJECT INSTEAD OF A LIST OF <T>
return lst;
} catch (Exception e) {
throw new WsIntegracaoException(
"WS method error [listEntity()]", e);
}
}
调用泛型方法:
List<City> list = listEntity(City.class);
// Here I get a ClassCastException
fillTable(list);
列表元素(错误):
java.lang.Object@23f6b8
例外:
java.lang.ClassCastException: java.lang.Object 无法转换为 java.io.Serializable
【问题讨论】:
-
Sotirios Delimanolis 回答错误,这是正确答案:stackoverflow.com/questions/21176195/…
-
您可以随时回复
@username,以便通知该用户。