如果一个对象中有两个同类型的对象属性a、b,如果a、b直接引用同一对象的内存地址,JSONObject.toJSONString方法得到的json字符串会出现内存地址引用。
public static void main(String[] args) {
JsonVO jsonVO = new JsonVO();
A a = new A();
a.setA("a");
a.setB("b");
jsonVO.setA(a);
jsonVO.setB(a);
System.out.println(JSONObject.toJSONString(jsonVO));
}
@Data
public class JsonVO implements Serializable {
private A a;
private A b;
}
@Data
public class A implements Serializable {
private String a;
private String b;
}
控制台输出结果:{“a”:{“a”:“a”,“b”:“b”},“b”:{" r e f " : " ref":" ref":".a"}}
如何避免呢?
System.out.println(JSONObject.toJSONString(jsonVO, SerializerFeature.DisableCircularReferenceDetect));