Gau*_*pta 4 java stack-overflow json gson
我试图使用Gson库将Json字符串解析为Java对象,但我遇到了StackoverflowException.
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)
Run Code Online (Sandbox Code Playgroud)
Json字符串:
{"password":"ac@123","role":"normaluser","name":"Archana Chatterjee","username":"a.chatterjee","designation":"Teacher","id":"T_02","age":42}
Run Code Online (Sandbox Code Playgroud)
解析代码:
Entity entity = null;
entity = gson.fromJson(json, Staff.class);
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
我也在Gson2.2.2中发现了相关的错误,但我使用的是Gson 2.2.4.所以,只是想确保这是我的错误还是在链接中提到错误.
来自Gson用户指南:
如果字段标记为瞬态(默认情况下),则忽略该字段,并且不包括在JSON序列化或反序列化中.
...
默认情况下,如果将字段标记为瞬态,则会将其排除.同样,如果字段标记为"静态",则默认情况下将其排除.
因此,您的问题的解决方案只是将您标记logger为瞬态或静态,例如:
transient Logger logger = Logger.getRootLogger();
Run Code Online (Sandbox Code Playgroud)
这样,变量将从序列化和反序列化中排除,您将不会收到该错误.
| 归档时间: |
|
| 查看次数: |
2819 次 |
| 最近记录: |