我想解析使用Gson庫的Json字符串到Java對象,但我遇到了StackoverflowException。在Gson的Stackoverflow異常
java.lang.StackOverflowError
com.google.gson.internal.$Gson$Types.checkNotPrimitive($Gson$Types.java:431)
com.google.gson.internal.$Gson$Types.access$000($Gson$Types.java:42)
com.google.gson.internal.$Gson$Types$WildcardTypeImpl.($Gson$Types.java:540)
com.google.gson.internal.$Gson$Types.canonicalize($Gson$Types.java:108)
com.google.gson.internal.$Gson$Types$WildcardTypeImpl.($Gson$Types.java:549)
com.google.gson.internal.$Gson$Types.canonicalize($Gson$Types.java:108)
com.google.gson.internal.$Gson$Types$WildcardTypeImpl.($Gson$Types.java:542)
com.google.gson.internal.$Gson$Types.canonicalize($Gson$Types.java:108)
com.google.gson.internal.$Gson$Types$WildcardTypeImpl.($Gson$Types.java:549)
com.google.gson.internal.$Gson$Types.canonicalize($Gson$Types.java:108)
JSON字符串:
{"password":"[email protected]","role":"normaluser","name":"Archana Chatterjee","username":"a.chatterjee","designation":"Teacher","id":"T_02","age":42}
解析代碼:
Entity entity = null;
entity = gson.fromJson(json, Staff.class);
Java類:
public class Staff extends LoginEntity {
Logger logger = Logger.getRootLogger();
@SerializedName("name")
String name;
@SerializedName("designation")
String designation;
@SerializedName("role")
String role;
@SerializedName("age")
int age;
}
public abstract class LoginEntity extends Entity {
private static final Logger logger = Logger.getRootLogger();
@SerializedName("username")
String mailid;
@SerializedName("password")
String password;
}
Root class for all.
public abstract class Entity {
Logger logger = Logger.getRootLogger();
@SerializedName("id")
public String id;
}
我也在Gson2.2.2中找到related error,但是我使用的是Gson 2.2.4。所以,只是想確保這是我的錯誤還是在鏈接中提到的錯誤。
即使您刪除序列化類中的記錄器成員,它是否會發生? –
沒有'記錄器'它工作正常。 :)但我無法理解這種行爲。如果你只是在一個答案中解釋這一點,這將是很好的,所以如果有人面臨同樣的問題,那麼他不需要像我這樣的幾個小時挖掘它。 – guptakvgaurav
我沒有看到它比鏈接到的頁面更多,但它似乎試圖解決類的所有成員的類型,並出於某種原因與記錄器失敗。如果不仔細觀察記錄器類型,我不能告訴你更多的東西:)希望別人能更好地理解實際問題。 –