1.transient
对于有可能发生无限循环的变量前,加上以上标示即可。
2.还有方案2,例如有时候用,有时候不用,部分用啊的情况
//创建一个带过滤条件的gson对象
Gson gson = new GsonBuilder()
.setExclusionStrategies(new ExclusionStrategy() {
/**
* 设置要过滤的属性
*/
@Override
public boolean shouldSkipField(FieldAttributes attr) {
//我们只过滤User类的id属性,而Type类的id属性还是要输出的
boolean b = false;
//如果当前属性所在的类是User的话,就使用regUser过滤
//否则就用regOther来过滤
if(attr.getDeclaringClass() == User.class) {
b = regUser.contains("|" + attr.getName() + "|");
} else {
b = regOther.contains("|" + attr.getName() + "|");
}
//这里,如果返回true就表示此属性要过滤,否则就输出
return !b;
}
/**
* 设置要过滤的类
*/
@Override
public boolean shouldSkipClass(Class<?> clazz) {
//这里,如果返回true就表示此类要过滤,否则就输出
return false;
}
}).create();
3.Expected BEGIN_OBJECT but was STRING异常
一般是类的get,set方法不对,不然就是传的属性有问题。