【问题标题】:Exception when JSON data is displayed in JSP在 JSP 中显示 JSON 数据时的异常
【发布时间】:2013-04-17 13:04:30
【问题描述】:

我正在尝试在 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)

我该如何解决这个问题?

【问题讨论】:

  • 堆栈跟踪听起来像是 GSON 问题,而不是 JSP 问题。
  • 您使用的是什么版本的 Gson?此外,您应该能够使用new Gson().toJson(employee); 直接序列化您的列表(无需类型标记)。
  • @Perception 我正在使用gson-2.2.2.jar
  • @Polppan - 您的“直接使用”代码示例没问题,应该可以消除您的 servlet 端错误。至于在页面上显示结果(通过 Javascript),您现在有什么问题?旁注,我确实找到了this link on Google Groups,这可能与您的原始问题有关。
  • @Perception 我的问题已经解决,谢谢。如果您可以发布答案,我将很乐意接受。

标签: java json jsp servlets gson


【解决方案1】:

快速Google search 揭示了与使用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 代码正常工作,那么您应该一切顺利。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-28
    • 2021-10-22
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 2014-04-08
    • 2023-03-30
    • 2012-09-20
    相关资源
    最近更新 更多