繁体   English   中英

Gson.fromJson()引发StackOverflowError

[英]Gson.fromJson() throws StackOverflowError

我们有这个杰森:

{
    "id": 500,
    "field1": "TESTE",
    "banco": {
        "id": 300,
        "descricao": "BANCO_TESTE"
    },
    "categorias": [
        {
            "id": 300,
            "descricao": "PT",
            "publica": true
        }
    ]
}

还有我的豆子:

public class Asking implements Serializable {
     private long id;
     private String field1;
     private Bank bank;
     private List<Categoria> categorias;

     //[getters and setters]
}

豆银行和Categoria:

public class Bank implements Serializable {
private Long code;
private Long id;
private String descricao;
//getters and setters
}

public class Categoria implements Serializable {
private Long code;
private Long id;
private String descricao;
private boolean marcada;
private boolean publica;
//getters and setters
}

当我打电话时:

gson.fromJson(strJson, tokenType);

错误出现:

Method threw 'java.lang.StackOverflowError' exception.

怎么了?

我无法重现此问题。 这里有两件事之一是错误的:

  1. 您的bean没有按照您所说的那样定义。 检查它们是否在getter和setter方法部分中隐藏了其他字段。 如果您有循环引用,可能会发生这种情况。
    • 您已在评论中指出,这很可能是您的问题。 我建议:
      1. 从bean中删除多余的字段
      2. 创建一个包含额外字段的新类,以及一个Asking实例的字段
      3. 使用Gson反序列化Asking实例,然后将其传递到新类的构造函数中。
  2. 您使用gson.fromJson方法的设置正在做意外的gson.fromJson 这是我正在使用的,效果很好:

     public static void parseJSON(String jsonString) { Gson gsonParser = new Gson(); Type collectionType = new TypeToken<Asking>(){}.getType(); Asking gsonResponse = gsonParser.fromJson(jsonString, collectionType); System.out.println(gsonResponse); } 

请检查您的bean类定义中是否包含其他字段,否则,请尝试使反序列化与我的反序列化匹配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM