調用webapi接口的實現

遠程調用webapi接口技術文檔

一、webapi接口

Webapi接口是一種使用json作爲存放服務端數據的載體,將服務端數據生成爲json,以json的形式存放,供外界調用,獲取數據。外界用戶需要獲取數據時,向webapi接口發起http請求,該請求一般是POST方式,因爲webapi需要存放,傳輸大量數據,所以一般使用POST方式接受用戶請求並響應;通過瀏覽器地址欄向webapi發出請求時,請求會失敗,因爲瀏覽器地址欄發出的是GET請求,請求的資源(webapi)不支持 http  GET方法。所以瀏覽器一般無法直接訪問到該接口。可以使用postman插件來直接請求webapi資源。

二、基本思路

1、建立一個請求類,向webapi發起http POST請求;

2、用inputstream流接收webapi返回的json數據流;

3、將接收到的數據流生成json,(即將接收到的響應數據流生成json對象);

4、解析生成的json對象獲取數據;

三、具體實現

1、準備以下所必須的jar包:

 

2、建立實現類:

package hm.boiler.utils;

import java.io.BufferedReader;

import java.io.DataOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.net.HttpURLConnection;

import java.net.URL;

import java.nio.charset.Charset;

import net.sf.json.JSONArray;

import net.sf.json.JSONObject;

 

public class InvokWebApiUtil {

    private static HttpURLConnection conn;

    private static InputStream in;

    private static final String url = "http://127.0.0.1:8080/api/compeny/empc/empInfos";

   

    //建立http連接

    public static  HttpURLConnection getHttpConn(String url) throws IOException{

       URL neturl = new URL(url);//創建URL對象neturl,並將接口地址url傳給neturl對象

       HttpURLConnection hconn = (HttpURLConnection) neturl.openConnection();//開啓連接

       return hconn;       

    }

      

    //發送post請求

    public static InputStream postRequest() throws Exception{    

       conn = getHttpConn(url);

       //設置請求頭

       conn.setRequestProperty("Content-Type","application/json; charset=UTF-8");//請求類型

       conn.setRequestProperty("Content-Length", "0");//內容長度

        conn.setRequestMethod("POST");//請求方式爲post

       conn.setDoOutput(true);//post請求必須要加上 conn.setDoInput(true)conn.setDoOutput(true);這兩句代碼

       conn.setDoInput(true);

             

        //獲取conn對象的相應輸出流,設置發送請求參數

       DataOutputStream os = new DataOutputStream(conn.getOutputStream());

           os.write("".getBytes("UTF-8"),0,0);

           os.flush();

           os.close();    

           conn.connect();                             

          //開始獲取數據

          in = conn.getInputStream(); 

          return in;

       }         

    //將接口返回數據轉化爲json對象

    public static JSONObject stream2json() throws Exception{ 

       BufferedReader rd = new BufferedReader(new InputStreamReader(postRequest(),Charset.forName("UTF-8")));

       StringBuilder sb = new StringBuilder();

       int cp;

       while((cp = rd.read()) !=-1){

           sb.append((char) cp);

       }     

       String jsonText = sb.toString();

       JSONObject json = JSONObject.fromObject(jsonText);

       in.close();

       return json;

    }

    //解析json並拿到熱值和灰份數據

    public static double[] getQA() throws Exception {

       double[] values = new double[2]; //保存獲取到的數據

       JSONObject json = stream2json(); //得到生成的json對象

       JSONArray items =(JSONArray) json.get("root"); //獲取根節點

       JSONObject Order1 = items.getJSONObject(0);//獲取第一個子節點(json對象)

       JSONArray Bunkers = (JSONArray)Order1.getJSONArray("rootc")  

       //獲取第一個子節點下的子節點

       JSONObject Bunkers1 = Bunkers.getJSONObject(BunkerID); //    

       JSONArray Unit_BunkerCoals = Bunkers1.getJSONArray("rootc_t");

       JSONObject Unit_BunkerCoals1 = Unit_BunkerCoals.getJSONObject(0);

       JSONObject Coal = Unit_BunkerCoals1.getJSONObject("Coal");

       JSONObject CoalInfo  = Coal.getJSONObject("CoalInfo");

       QA[0] = CoalInfo.optDouble("value_a");

       QA[1] = CoalInfo.optDouble("value_b");

       conn.disconnect();//關閉連接

       return QA;//返回獲取的數據

    }

}

總結:json是以key-value的形式保存數據的,獲取數據時,拿到json對象,根據key取數據就可以。

 

 

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