java web 接收發送json格式的數據

說明:本人最近做了一個項目,其中遇到了一些問題,就這些問題的解決方法與大家分享。  

        概要:java web 接收json格式的數據 ,發送json格式的數據。  

         好了,廢話不多說,直接進入主題,web中我們經常使用的請求方式有兩種POST 、GET。我們都知道這兩種方式提交的數據協議,通常說的信息頭Content-Typ。不知道大家注意過沒有,我們提交的信息頭爲application/x-www-form-urlencoded格式。但是我的項目中傳來的數據格式是application/json格式。這讓我有點措手不及。我們都習慣了以鍵值對的方式接受參數、值,這次突然無參數名,就一個json數據。用慣了stuts,ActionForm 始終無法獲取值。沒辦法我只能去研究學習request底層知識,學完之後得到一些小的心得,這裏與大家分享一下,如有理解錯的地方請大神指正。  
        request請求發給服務器端的是數據流。但是咱們在服務器端卻能以參數名來獲取參數值,也就是說服務器端收的是鍵值對形式的數據。這是怎麼回事兒呢?我覺得原因出在信息頭也就是Content-Typ類型身上。我們用application/x-www-form-urlencoded格式發送請求會以鍵值對的形似被封裝。至於是在瀏覽器發送的時候被封裝的還是在服務器端被封裝的我還不太清楚。但是我的猜測是在瀏覽器發送請求的時候在客戶端被封裝的。對於信息頭不是application/x-www-form-urlencoded格式的請求會被瀏覽器直接以不處理的數據流發送到服務器端,這也就是爲什麼我用ActionForm始終拿不到值得原因。那麼要怎麼處理以application/json格式發送的數據呢?  
        要處理以application/json格式發送的數據非常簡單,我之前說過的,瀏覽器會把所有非application/x-www-form-urlencoded格式的請求以不處理的數據流發送到服務器端  
。那麼我們只需要在服務器端接收這個數據流並做相應處理即可例如:我們先接收這個輸入流 request.getInputStream();然後再對這個輸入流進行處理,把其以字符串的形式獲取。具體的獲取方法我就不在這兒贅述了(因爲太簡單了),如果真的想知道怎麼去實現的可以去的資源庫中下載,有我打成createsun-HttpServletRequestJson-1.0.jar包(此jar包爲免費資源),爲了支持開源我把源碼createsun-HttpServletRequestJsonSource-1.0.jar也放到我的資源庫中供大家下載(下載豆1)。懶得實現的話,就動手下載我的jar包或源代碼。  
        以application/json格式把數據發送到客戶端是非常簡單的,不哆嗦直接上代碼:  
             response.setContentType("application/json;charset=UTF-8");  
             response.setCharacterEncoding("UTF-8");  
             response.setHeader("Cache-Control", "no-cache");     
             PrintWriter returnValue=response.getWriter();  
             打完收工。  
        我們只需要把一個字符串寫成json格式即可例如:String json = "{\"status\" : true , \"info\" : \"我是json格式數據\"}" ;  
             returnValue.write(json);  
             returnValue.close();  
             好了完成。  
        如果你實在懶到家了,也可以去json網站下載java json轉換數據包。其用法:  
            JSONObject jsonString = new JSONObject("{status : true , info : 我是json格式數據.}");  
            returnValue.write(jsonString.toString());  
             returnValue.close();  
        好,完成。


自:http://www.sctarena.com/Article/Article.asp?nid=4616

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章