struts返回json數據


  想要在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是一對多關系的表示.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM