私はこの問題を抱えています:私のSQLデータベースには、INT型で自動インクリメンタルな主キーIDUtenteを持つテーブルUtenteがあります。私が持っているデータベースで:
ID|Name|....
1|Name1|....
2|Name2|....
Java サーブレットでは、データベースからデータを読み取り、次の方法で 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 に等しいことです! なんで?必要ならクラスのウテンテも書きます!