天天看點

Class org.apache.struts2.json.JSONWriter can not access a member of *

異常形式:

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"

解釋:

原因:

struts2的action裡面的資料轉換成json資料時,會将提供了get方法的屬性都串行化輸出json到用戶端。有的時候,很多屬性并不能串行化成json資料,比如這裡的oracle.jdbc.driver.baseresultset。這時還進行強行轉換就會出現這樣的異常。

解決方法:

在不能串行化到json的屬性相應的get方法前加一條json标記 @json(serialize=false)。告訴json不需要轉化這個屬性。或者根本不寫這個get方法。

後記:

對于不需要在前台輸出的json資料,也可以用同樣的方法進行處理,進而減少伺服器和用戶端間互動的資訊量。

可在需要在前台輸出的屬性的get方法前加上@json(name="status")辨別,進而為該屬性起了一個别名,在前台就可以通過status作為屬性名來讀取其值。