標籤:懶載入 log eclips 變數 注意 ram 常用 詳細 sea
想要在struts中返回json格式資料有兩種辦法。
1.使用servlet的輸出資料流
實際上就是在struts中擷取response對象的輸出資料流。然後寫入你要返回的json資料,本質和用servlet返回json資料是一樣的,需要自己匯入json的jar包。不做詳細介紹。
2.試用struts對json的擴充
這裡需要兩個jar包,xwork-core-2.1.6.jar和struts2-json-plugin-2.1.8.jar。如果是用MyEclipse注入的struts環境就不需要手動了。下面以一個例子講解。
1 package action; 2 3 import java.util.HashMap; 4 import java.util.List; 5 import java.util.Map; 6 7 import org.apache.struts2.json.annotations.JSON; 8 9 import com.opensymphony.xwork2.ActionSupport;10 11 import entity.Outbox;12 import util.DaoFactory;13 14 public class SendBoxJson extends ActionSupport {15 private static final long serialVersionUID = 1L;16 private Map<String,Object> data;17 private String state;18 19 private String userId;20 private String searchType;21 private String keyValue;22 private String start;23 private String end;24 25 26 27 28 29 public Map getData() {30 return data;31 }32 33 public String getState() {34 return state;35 }36 37 38 public void setUserId(String userId) {39 this.userId = userId;40 }41 42 public void setSearchType(String searchType) {43 this.searchType = searchType;44 }45 46 public void setKeyValue(String keyValue) {47 this.keyValue = keyValue;48 }49 50 public void setStart(String start) {51 this.start = start;52 }53 54 public void setEnd(String end) {55 this.end = end;56 }57 58 public String getJson() throws Exception {59 List<Outbox> list = DaoFactory.getOutBoxDaoInstance().getOutMails(userId, searchType, keyValue, start, end);60 state="success";61 data=new HashMap<String,Object>();62 data.put("data", list);63 data.put("state",state);64 System.out.println(data);65 return "heihei";66 }67 }
上面的是一個普通的struts類,沒什麼特殊之處。重點在struts的設定檔中。
1 <package name="json" namespace="/" extends="struts-default,json-default"> 2 <action name="json" class="action.SendBoxJson" method="getJson"> 3 4 <result name="heihei" type="json"> 5 6 <!-- 這裡指定將被Struts2序列化的屬性,該屬性在action中必須有對應的getter方法 --> 7 <param name="root">data</param> 8 <!-- 指定是否序列化空的屬性 --> 9 <param name="excludeNullProperties">true</param>10 <!-- 這裡指定將序列化list中的那些屬性 -->11 <!-- <param name="includeProperties">data.*</param> -->12 <!-- 這裡指定將要從list中排除那些屬性,這些排除的屬性將不被序列化,一般不與上邊的參數配置同時出現 -->13 <!-- <param name="excludeProperties">id</param> -->14 </result>15 </action>16 </package>
在配置中,首先需要action所在的package繼承了json-default,或者繼承的父包繼承了json-default。然後result裡多了個type=“json”這是說明返回的是json字串。
<param name="root">data</param>要講data這個變數序列化後返回,data是上面struts類中一個變數。
注意如果data類型為list,需要使用
<param name="includeProperties">data.*</param>來指定,否則返回的json字串會為空白。
如果想要忽略對象的某個屬性,可在屬性的get方法加@JSON(serialize=false) ,常用在hibernate的實體中,如果返回的是hibernate實體,該實體又用到了另一個實體,就會因為懶載入的原因序列化失敗(自行百度),就需要在某些屬性加上上面的注釋。
上面的set是一對多關聯性的表示.
struts返回json資料