1. 程式人生 > >org.apache.struts2.json.JSONWriter can not access a member of class org.apache.commons.dbcp...

org.apache.struts2.json.JSONWriter can not access a member of class org.apache.commons.dbcp...

就會 log 要去 相同 source 系列 交互 ali who

版權聲明:本文為博主原創文章。未經博主同意不得轉載。 https://blog.csdn.net/bruce_6/article/details/35985475

之前在用ssh整合json時一直發現前臺獲取不到json的返回數據。直接執行action出現下面錯誤:

HTTP Status 500 - org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: java.lang.IllegalAccessException: Class org.apache.struts2.json.JSONWriter can not access a member of class org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper with modifiers "public"


主要原因:struts會將action中定義的一些變量序列化轉換成json格式。須要調用對象的一系列get方法(樣例中調用UserDAO的get方法),並調用以上變量的成員變量的get方法將其內容組成json格式。可是在序列化authorityService時,因為其成員變量中含有含有接口所以會報錯


最後參考網上的解決的方法攻克了,可是過程中發現網上的一些說法有問題。

http://blog.csdn.net/xtra6714/article/details/5721593

這位仁兄說方法返回接口類型時會出現這種錯誤,要去掉action中相關返回接口類型的get方法,可是我的action中沒有直接返回接口類型的方法啊!


http://hi.baidu.com/whosimplylol/item/bd93329d20884ccbb625315f

這篇文章中的解釋例如以下:

異常形式:

Class org.apache.struts2.json.JSONWriter can not access a member of * 或是 Class com.googlecode.jsonplugin.JSONWriter can not access a member of class*

第一種是struct2.1.8與json結合時的異常,另外一種是struct2.1.6與json結合的異常。

?

詳細:

Class org.apache.struts2.json.JSONWriter can not access a member of class oracle.jdbc.driver.BaseResultSet with modifiers "public"

?

解釋:

不能把程序中的某種數據結構串行化成json格式。

?

原因:

struts2的action裏面的數據轉換成json數據時。會將提供了get方法的屬性都串行化輸出JSON到client。有的時候,非常多屬性並不能串行化成json數據,比方這裏的oracle.jdbc.driver.BaseResultSet。這時還進行強行轉換就會出現這種異常。

?

解決方法:

在不能串行化到json的屬性對應的get方法前加一條json標記 @JSON(serialize=false)。告訴json不須要轉化這個屬性。

或者根本不寫這個get方法。

?

後記:

對於不須要在前臺輸出的json數據,也能夠用相同的方法進行處理,從而降低server和client間交互的信息量。

可在須要在前臺輸出的屬性的get方法前加上@JSON(name="status")標識。從而為該屬性起了一個別名,在前臺就能夠通過status作為屬性名來讀取其值。


http://www.cnblogs.com/xiaoyaorensheng/archive/2013/01/02/2842302.html這個文章裏解釋的還是比較令人愜意的。調用的UserDAO的成員變量裏有返回接口的get方法。所以無法返回json數據。





org.apache.struts2.json.JSONWriter can not access a member of class org.apache.commons.dbcp...