java接收post請求並獲取資料的方法(傳的json不含key)
阿新 • • 發佈:2018-12-12
昨天遇到一個問題
就是在接收post請求的時候獲取不到請求資料,自己用ajax寫的時候沒有問題
這個是報文內容
{"type":"WNING_INFO","code":"WYC","downtime":"2017-01-0101:00:00","busicode":"2017021212123456","data":{"equipment_id":"1","equipment_name":"1號度計","equipment_type":"","type":"SECOND","status":"異常","warn_infor":"設障斷電","location_code":"01010101","company_id":"101","company_name":"","item_code":"000001","item_name":"大米","car_no":""}}
這段報文用ajax就可傳送過去
data中就是這段資料
可能因為是在後臺發起的post的請求所以可能跟瀏覽器端的請求有所區別,但我到現在也沒有找到區別在哪
這段程式碼就是傳送post請求的方法
public static String sendPost(String url, String param) { PrintWriter out = null; BufferedReader in = null; String result = ""; try { URL realUrl = new URL(url); // 開啟和URL之間的連線 URLConnection conn = realUrl.openConnection(); // 設定通用的請求屬性 conn.setRequestProperty("Content-Type","application/json"); conn.setRequestProperty("charset", "utf-8"); // 傳送POST請求必須設定如下兩行 conn.setDoOutput(true); conn.setDoInput(true); // 獲取URLConnection物件對應的輸出流 out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(),"utf-8")); // 傳送請求引數 out.print(param); // flush輸出流的緩衝 out.flush(); // 定義BufferedReader輸入流來讀取URL的響應 in = new BufferedReader( new InputStreamReader(conn.getInputStream())); String line; while ((line = in.readLine()) != null) { result += line; } System.out.println(line); } catch (Exception e) { System.out.println("傳送 POST 請求出現異常!"+e); e.printStackTrace(); } //使用finally塊來關閉輸出流、輸入流 finally{ try{ if(out!=null){ out.close(); } if(in!=null){ in.close(); } } catch(IOException ex){ ex.printStackTrace(); } } return result; }
所以就先貼出來我解決這個問題的方式
因為資料歸根到底還是以資料流的方式傳送過來的,所以就用流的方式來處理資料
這段程式碼就是獲取HttpServletRequest中的請求資料,並解析
BufferedReader reader = null; StringBuilder sb = new StringBuilder(); try{ reader = new BufferedReader(new InputStreamReader(request.getInputStream(), "utf-8")); String line = null; while ((line = reader.readLine()) != null){ sb.append(line); } } catch (IOException e){ e.printStackTrace(); } finally { try{ if (null != reader){ reader.close(); } } catch (IOException e){ e.printStackTrace(); } } System.out.println("json;"+sb.toString());
最後得到的就是一個json字串
得到這個json以後直接用Gson解析就行。
希望能幫助到碰見這個問題的人,同樣也希望有人能給我解釋一下出現這個問題的具體原因,謝謝