0

我正在尝试在 JSP 中显示 JSON 数据,并且我第一次尝试在 JSP 中显示 JSON 数据。

数据是从数据库中获取的,我在 Servlet 中有以下代码

        Gson gson = new Gson();
        List<Employee> employee = myDAO.getEmpDetails("SMITH");
        JsonElement element = 
            gson.toJsonTree(employee, new TypeToken<List<Employee>>() {
                }.getType());
        JsonArray jsonArray = element.getAsJsonArray();
        response.setContentType("application/json");
        response.getWriter().print(jsonArray);

在 JSP 中我称之为

$.get('myservlet',function(responseJson) {
            if(responseJson!=null){
                $("#empTable").find("tr:gt(0)").remove();
                var table1 = $("#empTable");
                $.each(responseJson, function(key,value) { 
                     var rowNew = $("<tr><td></td><td></td><td></td><td></td><td></td><td></td></tr>");
                        rowNew.children().eq(0).text(value['empNo']); 
                        rowNew.children().eq(1).text(value['empName']); 
                        rowNew.children().eq(2).text(value['empAddress']);                          
                        rowNew.appendTo(table1);
                });
                }
            });

我遇到的问题是当我调用我的 servlet 类时,我得到了以下异常

java.lang.RuntimeException: Missing type parameter.
at com.google.gson.reflect.TypeToken.getSuperclassTypeParameter(TypeToken.java:84)
at com.google.gson.reflect.TypeToken.<init>(TypeToken.java:61)
at test.net.MyService$1.<init>(MyService.java)
at test.net.MyService.doPost(MyService.java:101)
at test.net.MyService.doGet(MyService.java:47)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)

我该如何解决这个问题?

4

1 回答 1

1

快速的Google 搜索TypeToken揭示了与使用该类相关的问题的可能来源。如果您使用 ProGuard 或从参数化类中删除类型信息的类似编译器工具,则令牌初始化可能会以所示方式失败。但是,当您追踪并解决该问题时,完全可以在不使用令牌的情况下序列化您的数据列表:

List<Employee> employee = myDAO.getEmpDetails("SMITH");

String json = new Gson().toJson(employee);   // Note use of `toJson` method
response.setContentType("application/json");
response.getWriter().print(json);

这应该消除您的 servlet 端的任何错误来源,并且只要您的 Javascript 代码有效,那么您应该一切顺利。

于 2013-04-17T14:56:50.867 回答