這幾天對接第三方支付接口,在回調通知里獲取返回參數,有一家返回的json格式,請求參數可以從標准輸入流中獲取。
//1.解析參數 , 讀取請求內容 BufferedReader br; String line = null; StringBuilder sb = new StringBuilder(); try { br = new BufferedReader(new InputStreamReader(request.getInputStream(),"utf-8")); while((line = br.readLine())!=null){ sb.append(line); } } catch (IOException e1) { e1.printStackTrace(); } String params = sb.toString(); //2.轉成json JSONObject jsonParams = JSONObject.fromObject(params);
以上是返回json格式。
如果返回K=V&...這種格式,即可直接從request中獲取,具體做法為request.getParameter("keyName");這里有個問題,如果以K=V&...這種形式,則不要以讀標准流的方式獲取參數,這樣會導致下面在request.getParameter中獲取不到值,而且讀出來也不是json格式。
即在使用HTTP協議實現應用間接口通信時,服務端讀取客戶端請求過來的數據,會用到request.getInputStream(),第一次讀取的時候可以讀取到數據,但是接下來的讀取操作都讀取不到數據。
原因是:
InputStream並沒有實現reset方法(可以重置首次讀取的位置),無法實現重置操作;
一個InputStream對象在被讀取完成后,將無法被再次讀取,始終返回-1。
解決方案可以讓inputStream.reset一下。
