gson和标识符

时间:2013-02-03 16:49:26

标签: json gson

我有这个问题:在我的sql数据库中,我有一个表Utente,其主键IDUtente是INT类型并且是Auto Incremental。 我在db中有:

ID|Name|....
1|Name1|....
2|Name2|....

在Java servlet中我从数据库中读取数据,并以这种方式使用Gson序列化数据:

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

这里没关系,因为字符串lista等于:

[{"idUtente":1,"username":"a","password":"a","nome":"a","cognome":"a","dataNascita":"dic 12, 1988","telefono":"3200769667","indirizzo":"a","citta":"a","luogoDiNascita":"a","abbonamentiATempo":0,"abbonamentiAPunti":0,"dataIscrizione":"dic 12, 2000","posizione":"socio","email":"a"},{"idUtente":2,"username":"b","password":"b","nome":"b","cognome":"b","dataNascita":"giu 25, 1960","telefono":"3474213142","indirizzo":"b","citta":"b","luogoDiNascita":"b","abbonamentiATempo":0,"abbonamentiAPunti":0,"dataIscrizione":"mar 11, 2001","posizione":"non socio","email":"b"}]

在我的JSP页面中,我现在必须反序列化字符串,我这样做:

<%String lista = (String)request.getAttribute("lista");
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();                         
Type listType = new TypeToken<ArrayList<Utente>>() {}.getType();
ArrayList<Utente> users = gson.fromJson(lista, listType);
for(int i=0;i<users.size();i++){
out.print("<tr>");
out.print("<td>"+users.get(i).getIdUtente()+"</td>");
out.print("<td>"+users.get(i).getNome()+"</td>");
out.print("<td>"+users.get(i).getCognome()+"</td>");
    out.print("<td>"+users.get(i).getPosizione()+"</td>");
    out.print("<td>"+users.get(i).getTelefono()+"</td>");
 }

问题是打印的ID总是等于0!为什么? 如果有必要,我也会写我的课程Utente!

1 个答案:

答案 0 :(得分:0)

为什么要将utenti序列化为JSON,将其置于请求中,然后在JSP中对其进行反序列化?

只需将列表放入请求中并提取List,因为您是字符串 - 无需GSON。

现在,如果你把它通过网络连接到客户端,那么我可以看到GSON的需要,但不是在你的特定用例中。

您的整个操作都在服务器内进行,因此您无需序列化utenti列表实例。