歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Struts2返回JSON對象的方法總結

如果是作為客戶端的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