当前位置: 首页 > 面试题库 >

如何序列化java.util.List 使用Gson库访问Json吗?

经福
2023-03-14
问题内容

在我的servlet中,我有以下代码:

    response.setContentType("application/json");//set json content type
    PrintWriter out = response.getWriter();

   EntityManagerFactory emf=Persistence.createEntityManagerFactory("webPU");
   GpsJpaController gjc=new GpsJpaController(emf);    
   java.util.List<Gps> listGps=gjc.findGpsEntities();//retrieve the list of GPS from DB

   Gson gson=new Gson();
   String json=gson.toJson(listGps); //convert List<Gps> to json
   out.println(json);

使用以下代码从ajax返回响应:

$.ajax({ 
           type: "GET", 
           url: "getInfoGeoActive",
           dataType: 'json',
           error: function(xhr, ajaxOptions, thrownError){ $("#content").empty().append("* Error from server cause: "+thrownError).addClass("error"); } ,
           success:function(data){$("#content").empty().append(data);}
             });

当我运行代码时,我仍然收到以下错误(来自ajax):

  Error from server cause:Internal Servlet Error

我还尝试List<Gps>在没有ajax的同一java页面中显示序列化对象,如下所示:

EntityManagerFactory emf=Persistence.createEntityManagerFactory("JavaApplication21PU");
        GpsJpaController gjc=new GpsJpaController(emf);
        java.util.List<Gps> listGps=gjc.findGpsEntities();

        Gson gson=new Gson();
        String json=gson.toJson(listGps);

        System.out.println(json);

我收到此错误:

Exception in thread "main" java.lang.StackOverflowError
    at java.lang.StrictMath.floorOrCeil(StrictMath.java:355)
    at java.lang.StrictMath.floor(StrictMath.java:340)
    at java.lang.Math.floor(Math.java:424)
    at sun.misc.FloatingDecimal.dtoa(FloatingDecimal.java:620)
    at sun.misc.FloatingDecimal.<init>(FloatingDecimal.java:459)
    at java.lang.Double.toString(Double.java:196)
    at java.lang.Double.toString(Double.java:633)
    at com.google.gson.stream.JsonWriter.value(JsonWriter.java:441)
    at com.google.gson.Gson$4.write(Gson.java:270)
    at com.google.gson.Gson$4.write(Gson.java:255)

请帮忙!

编辑 : 此问题的最终解决方案


问题答案:

由于无限递归,发生 Exception 。您可能需要彻底检查代码,以防任何意外的递归。



 类似资料:
  • 当我试图使用Gson库反序列化JSON对象数组时,我遇到了一个问题。 JSON数组的一个示例: 你怎么认为?反序列化这种JSON响应的正确Java代码是什么?

  • 问题内容: 我在尝试使用Gson库反序列化对象的JSON数组时遇到问题。 JSON数组的示例: 你怎么看?反序列化此类JSON响应的正确Java代码是什么? 问题答案: 要反序列化JSONArray,您需要使用TypeToken。您可以从GSON用户指南中了解更多信息。示例代码: 如果您有JSONArray,则可以使用

  • 在我的servlet中,我有以下代码: 响应从 Ajax 返回,代码如下: 当我运行代码时,我仍然收到以下错误(来自 ajax): 我还尝试显示序列化对象<code>List 我收到此错误: 请帮帮忙! 编辑:这个问题的最终解决方案

  • 问题内容: 我在尝试序列化包含 即使我写了: 并应用: 我仍然无法序列化此类: Stacktrace :(在pastebin上完整) 有什么办法吗? 问题答案: 您的问题是那是一个。假设您使用它将在Windows PC上创建类似的实例。现在,您必须告诉GSON如何反序列化此类型: 您可以使用的另一种方法是: typeHierarchyAdapter的目的是在您希望为类型的所有子类型使用相同的表示形

  • 问题内容: 我在反序列化以下json数组时遇到麻烦(对不起,大小): 如果将其粘贴到json-viewer中,则会得到以下结构: 现在,包含具有坐标的数组的数组具有可变大小。所以我想在Java中,整个对象应该是一个数组,其中包含数组的集合,每个数组都包含一个。就像是 但是gson不接受这一点。我收到以下错误消息: 这似乎很奇怪,因为对我来说好像不像一个数组。但这可能使我感到困惑,或多或少地迷路了…

  • 问题内容: 我想使用GSON将下面的Example类序列化为JSON。 我期望得到以下输出: 但是调用函数返回 看来GSON无法在Map 内序列化Map 。这是GSON的限制,还是我在这里做错了? 问题答案: Nishant的答案之所以起作用,是因为Gson的默认构造函数默认启用了所有东西,否则您将不得不使用GsonBuilder手动启用它们。 从JavaDocs: 使用默认配置构造一个Gson对