远程调用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取数据就可以。

 

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐