两种访问第三方接口获取接口json数据的方式

404 阅读1分钟

应用场景:第三方的系统提供了接口用于获取数据,返回值类型为json。通过发送指定请求的方式取到数据,处理数据并保存。

一、使用HttpUrlConnection发送请求

1.发送POST请求

     /**
     * 使用HttpUrlConnection发送POST请求并接收数据
     */
    public String httpUrlConnection(String apiUrl){
        try {

            //1.创建URL 创建链接
            URL url = new URL(apiUrl);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            //2.设置获取的数据类型
            conn.setRequestProperty("Content-Type","application/json");
            //3.设置编码格式
            conn.setRequestProperty("Charset","UTF-8");
            //4.维持长连接
            conn.setRequestProperty("Connection","Keep-Alive");
            conn.setReadTimeout(50000);
            conn.setConnectTimeout(50000);
            //5.设置请求方式
            conn.setRequestMethod("POST");
            conn.setDoOutput(true);
            //6.设置 请求的内容 (请求体)
            OutputStream os = conn.getOutputStream();
            String json = "{}";     // POST请求的参数列表  
            os.write(json.getBytes());
            os.flush();
            os.close();

            StringBuffer result = new StringBuffer();
            //读取URL的响应
            BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) {
                result.append(line);
            }

            System.out.println(result.toString());


        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }

2.发送GET请求

    public List<Map> httpRequest(String apiPath, String marketCode, String tableName) {

        //获取接口数据
        BufferedReader in = null;
        StringBuffer result = null;
        List<Map> list = new ArrayList<>();
        //调用的api的接口地址
        String apiUrl = apiPath;
        try {
            URL url = new URL(apiPath);
            //打开和url之间的连接
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            //设置通用的请求属性
            connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            connection.setRequestProperty("Charset", "utf-8");
            connection.connect();
            result = new StringBuffer();
            //读取URL的响应
            in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) {
                result.append(line);
            }
            String result2 =  result.toString();


            //接口数据为List类型
            JSONObject jsonObject = JSON.parseObject(result2);
            if(jsonObject.getString("data") == null || jsonObject.getString("data").equals("[]")){
                 return null;
             }else {
                 JSONArray jsonArray = JSONObject.parseObject(result2).getJSONArray("data");
                 list = jsonArray.toJavaList(Map.class);
                 return list;
             }

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (in != null) {
                    in.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
        return list;
    }

二、使用OKHttp发送请求

    /**
     * 获取接口数据并处理、保存
     * 参数格式
     *  1.apiPath 即需要访问的 url
     *  2.startTime 和 endTime  格式为   yyyy-MM-dd  
     */
    public List<Map> httpRequest(String apiPath,String startTime,String endTime) throws Exception{

        //拼接请求体中的json语句
        String json = "{}";     //POST请求的参数列表
        //设置MediaType(决定浏览器将以什么形式、什么编码对资源进行解析)
        MediaType JSON = MediaType.parse("application/json; charset=utf-8");
        //1.创建okHttpClient对象
        OkHttpClient okHttpClient = new OkHttpClient();
        RequestBody requestBody = RequestBody.create(json,JSON);
        //2.创建Request对象,设置一个url,设置请求方式
        Request request = new Request.Builder()
                .url(apiPath)
                .post(requestBody)
                .build();
        //3.获取响应信息
        Response response = okHttpClient.newCall(request).execute();
        //4.将响应体中的信息转化为字符串
        String result = response.body().string();

        //处理获取到的数据
        JSONObject jsonObject = JSONObject.parseObject(result);
        if(jsonObject.get("datas") == null){
            return null;
        }else {
            String datas = jsonObject.get("datas").toString();
            JSONArray jsonArray = JSONObject.parseArray(datas);
            List<Map> saveList = new ArrayList();
            saveList = jsonArray.toJavaList(Map.class);
            for(int i = 0;i < saveList.size(); i ++){
                saveList.get(i).put("date",startTime);
            }
            System.out.println(saveList);
            apiMapper.saveData(saveList);
            return saveList;
        }
    }

OKHttp的依赖:

        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>4.9.0</version>
        </dependency>