struts返回json資料

來源:互聯網
上載者:User

標籤:懶載入   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資料

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.