Gson.fromJson() 抛出 StackOverflowError
Gson.fromJson() throws StackOverflowError
我们有这个 Json:
{
"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]
}
Bean Bank 和 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.WhosebugError' exception.
怎么了?
我无法重现这个问题。这里有两件事之一是错误的:
- 你的 bean 没有像你说的那样定义。检查它们是否在 getter 和 setter 方法部分中隐藏了其他字段。 This can happen if you have a circular reference.
- 您在评论中表示这可能是您的问题。我建议:
- 从您的 bean 中删除额外的字段
- 创建一个包含额外字段的新 class,以及
Asking
实例的一个字段
- 使用 Gson 反序列化
Asking
实例,然后将其传递给新的 class 的构造函数。
您对 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 class 额外字段的定义,要么,如果失败,尝试使你的反序列化匹配我的。
我们有这个 Json:
{
"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]
}
Bean Bank 和 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.WhosebugError' exception.
怎么了?
我无法重现这个问题。这里有两件事之一是错误的:
- 你的 bean 没有像你说的那样定义。检查它们是否在 getter 和 setter 方法部分中隐藏了其他字段。 This can happen if you have a circular reference.
- 您在评论中表示这可能是您的问题。我建议:
- 从您的 bean 中删除额外的字段
- 创建一个包含额外字段的新 class,以及
Asking
实例的一个字段 - 使用 Gson 反序列化
Asking
实例,然后将其传递给新的 class 的构造函数。
- 您在评论中表示这可能是您的问题。我建议:
您对
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 class 额外字段的定义,要么,如果失败,尝试使你的反序列化匹配我的。