日期:2014-05-16 浏览次数:20425 次
报错
net.sf.json.JSONException: There is a cycle in the hierarchy!
net.sf.json.util.CycleDetectionStrategy$StrictCycleDetectionStrategy.handleRepeatedReferenceAsObject
(CycleDetectionStrategy.java:97)
net.sf.json.JSONObject._fromBean(JSONObject.java:833)
net.sf.json.JSONObject.fromObject(JSONObject.java:168)
net.sf.json.AbstractJSON._processValue(AbstractJSON.java:265)
net.sf.json.JSONArray._processValue(JSONArray.java:2514)
net.sf.json.JSONArray.processValue(JSONArray.java:2539)
net.sf.json.JSONArray.addValue(JSONArray.java:2526)
net.sf.json.JSONArray._fromCollection(JSONArray.java:1057)
net.sf.json.JSONArray.fromObject(JSONArray.java:123)
net.sf.json.AbstractJSON._processValue(AbstractJSON.java:237)
net.sf.json.JSONObject._processValue(JSONObject.java:2808)
net.sf.json.JSONObject.processValue(JSONObject.java:2874)
net.sf.json.JSONObject.setInternal(JSONObject.java:2889)
net.sf.json.JSONObject.setValue(JSONObject.java:1577)
net.sf.json.JSONObject._fromBean(JSONObject.java:934)
net.sf.json.JSONObject.fromObject(JSONObject.java:168)
net.sf.json.AbstractJSON._processValue(AbstractJSON.java:265)
net.sf.json.JSONObject._processValue(JSONObject.java:2808)
net.sf.json.JSONObject.processValue(JSONObject.java:2874)
net.sf.json.JSONObject.setInternal(JSONObject.java:2889)
net.sf.json.JSONObject.setValue(JSONObject.java:1577)
net.sf.json.JSONObject._fromBean(JSONObject.java:934)
net.sf.json.JSONObject.fromObject(JSONObject.java:168)
net.sf.json.AbstractJSON._processValue(AbstractJSON.java:265)
?
?
?
hibernate使用CGLIB把POJO的domain对象动态代理,实现它的魔法,但是给JSON的序列化带来了麻烦,因为JSON无法对lazy的属性进行序列化。有以下的四个方法可以解决hibernate的序列化问题
domain类实现JSONString接口
用属性过滤器
1. 实现JSONString接口是侵入性最强的方法
public class Person implements JSONString { private String name; private String lastname; private Address address; // getters & setters