使用Gson反序列化JSON字符串

8

我的Java Servlet以以下方式返回JSON字符串:

Gson gson = new Gson();     
String lista = gson.toJson(utenti);
System.out.println(lista);
request.setAttribute("lista", lista);
request.getRequestDispatcher("GestioneUtenti.jsp").forward(request, response);

现在,在jsp页面中,我想再次使用我的ArrayList。我尝试这样做:

<%
String lista = (String)request.getAttribute("lista");
Gson gson = new Gson();
ArrayList<Utente> users = gson.fromJson(lista, TypeToken.get(new ArrayList<Utente>().getClass()).getType());        
out.println(users.get(0).getUsername());
%>

我遇到了这个异常:

java.lang.ClassCastException: com.google.gson.internal.StringMap cannot be cast to classi.Utente

你好,我能为您提供帮助吗?如果我漏掉了任何细节,请告诉我!谢谢 :-)


1
尝试使用以下代码来获取您的类型标记 - new TypeToken<ArrayList<Utente>>() {} - Perception
为什么在Servlet中将utenti序列化为JSON并将其反序列化回ArrayList,而不是直接使用request.setAttribute("lista", utenti); - Philipp Reichart
2个回答

17

我用这段代码解决了问题:

String lista = (String)request.getAttribute("lista");
Gson gson = new Gson();                         
Type listType = new TypeToken<ArrayList<Utente>>() {}.getType();
ArrayList<Utente> users = new Gson().fromJson(lista, listType);

1
我找到的最佳解决方案 - Maksim Novikov
非常有帮助...我用它将Firebase远程配置JSON转换为Java对象列表。非常感谢。 - Pooja

0

这表明您有一个StringMap,其中声明了一个Utente类。错误的源很可能是您的用户列表


我无法理解...类Utente是如何定义的。我不知道在fromjson()方法的第二个参数中应该放什么。 - Martina
错误提示说你期望得到一个Utente,但实际上得到的是一个StringMap,因此出现了CCE错误。 - imrichardcole

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接