ajax框架與SSH交互總返回error

ajax框架與SSH交互總返回error


FireFox查看異常顯示

Class org.apache.struts2.json.JSONWriter can not access a member of class org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper with modifiers "public"


發現一個規律,凡是在struts2 pojo action中有對象屬性的,並被hibernate管理的,都會出現這種問題。因爲hibernate會給每個被管理的對象加上hibernateLazyInitializer屬性,同時struts-jsonplugin或者其他的jsonplugin都是通過java的反射機制將pojo轉換成json的,但是hibernateLazyInitializer無法由反射得到,所以就拋異常了。

這種問題同樣發生在spring mvc的通過ajax訪問SSH2中。

解決方法:

第一種方法:將POJO Actionhibernate管理對象的get方法去掉,同時在struts2struts.xml文件中的<result type="json"></result>加入<param name="excludeProperties">.*hibernateLazyInitializer</param>

<result type="json">

<param name="excludeProperties">.*hibernateLazyInitializer</param>

</result>

用於使用struts-jsonplugin的情況。

第二種方法:在pojo的類上加入annotation來排除hibernateLazyInitializer 這個屬性:

annotation

@JsonIgnoreProperties(value={"hibernateLazyInitializer"})


用於使用jackson來轉移json對象的情況。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章