如果是作為客戶端的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返回類型。
配置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}