歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Struts2返回JSON對象的方法總結

Struts2返回JSON對象的方法總結

日期:2017/3/1 10:09:50   编辑:Linux編程

如果是作為客戶端的HTTP+JSON接口工程,沒有JSP等view視圖的情況下,使用Jersery框架開發絕對是第一選擇。而在基於Spring3 MVC的架構下,對HTTP+JSON的返回類型也有很好的支持。但是,在開發工作中,對功能的升級是基於既定架構是很常見的情況。本人碰到需要用開發基於Struts2的HTTP+JSON返回類型接口就是基於既定框架結構下進行的。

Struts2返回JSON有兩種方式:1.使用Servlet的輸出流寫入JSON字符串;2.使用Struts2對JSON的擴展。

一.使用Servlet的輸出流

JSON接口的實質是:JSON數據在傳遞過程中,其實就是傳遞一個普通的符合JSON語法格式的字符串而已,所謂的“JSON對象”是指對這個JSON字符串解析和包裝後的結果。

所以這裡只需要將一個JSON語法格式的字符串寫入到Servlet的HttpServletResponse中,這裡使用的是PrintWriter的方式,當然也可以采用Stream流的方式。需要注意的是:在調用getWriter之前未設置編碼(既調用setContentType或者setCharacterEncoding方法設置編碼), HttpServletResponse則會返回一個用默認的編碼(既ISO-8859-1)編碼的PrintWriter實例。這樣就會造成中文亂碼。而且設置編碼時必須在調用getWriter之前設置,不然是無效的。

編寫接口代碼:

這裡的方法與一般的Struts2方法的區別是這裡是void返回類型。

  1. public void write() throws IOException{
  2. HttpServletResponse response=ServletActionContext.getResponse();
  3. /*
  4. * 在調用getWriter之前未設置編碼(既調用setContentType或者setCharacterEncoding方法設置編碼),
  5. * HttpServletResponse則會返回一個用默認的編碼(既ISO-8859-1)編碼的PrintWriter實例。這樣就會
  6. * 造成中文亂碼。而且設置編碼時必須在調用getWriter之前設置,不然是無效的。
  7. * */
  8. response.setContentType("text/html;charset=utf-8");
  9. //response.setCharacterEncoding("UTF-8");
  10. PrintWriter out = response.getWriter();
  11. //JSON在傳遞過程中是普通字符串形式傳遞的,這裡簡單拼接一個做測試
  12. String jsonString="{\"user\":{\"id\":\"123\",\"name\":\"張三\",\"say\":\"Hello , i am a action to print a json!\",\"password\":\"JSON\"},\"success\":true}";
  13. out.println(jsonString);
  14. out.flush();
  15. out.close();
  16. }

配置action

從以下的配置中可以明顯的看到配置與普通的action配置沒有任何區別,只是沒有返回的視圖而已。

<action name="write" class="json.JsonAction" method="write" />

返回值

Console代碼

{"user":{"id":"123","name":"張三","say":"Hello , i am a action to print a json!","password":"JSON"},"success":true}

Copyright © Linux教程網 All Rights Reserved