1. 程式人生 > 其它 >easy-okhttp的簡介以及使用

easy-okhttp的簡介以及使用

easy-okhttp框架簡介

easy-okhttp是對okhttp3上層封裝的網路框架,支援檔案上傳和下載表單提交(檔案和一個引數對應多值),鏈式呼叫,並且預設整合Gson,對返回結果多種轉換,
同時還支援HTTPS單向認證和雙向認證等特性。

easy-okhttp框架特性

  • 僅支援GET和POST兩種方式,其他如PUT等不太常用,就暫不支援
  • 基於POST的大文字資料、二進位制檔案上傳,即通過Http Body提交
  • 表單提交,帶有檔案的表單提交和表單提交支援引數名重複,在後臺接收到的是陣列或集合
  • 支援session保持
  • 對HTTPS支援單向認證和雙向認證
  • 支援同步請求和非同步請求,統一的資料處理介面
  • 開箱即用,預設的配置基本上滿足需求

easy-okhttp框架引入

<dependency>
    <groupId>com.mzlion</groupId>
    <artifactId>easy-okhttp</artifactId>
    <version>1.0.7-beta</version>
</dependency>

普通GET請求

        String timeStamp = String.valueOf(System.currentTimeMillis() / NumberEnum.THOUSAND.getCode());

        String md5DigestAsHex = DigestUtils.md5DigestAsHex((apiKey + "00001" + timeStamp + salt).getBytes());

        String responseData = HttpClient
                .get(url + "/piccre/aml-server/api/aml/outside/v1/queryRiskGradeInfo")
                .header("apiKey", apiKey)
                .header("apiCode", "00001")
                .header("timeStamp", timeStamp)
                .header("sign", md5DigestAsHex)
                .execute()
                .asString();

        Map<String, Object> map = JSON.parseObject(responseData, Map.class);

        if ((Integer) map.get("status") != NumberEnum.ZERO.getCode()) {

            throw new BusinessException("介面失敗");
        }

普通GET請求帶引數

        String timeStamp = String.valueOf(System.currentTimeMillis() / NumberEnum.THOUSAND.getCode());

        String md5DigestAsHex = DigestUtils.md5DigestAsHex((apiKey + "00005" + timeStamp + salt).getBytes());

        String responseData = HttpClient
                .get(url + "/piccre/aml-server/api/aml/outside/v1/getRiskGradeHis")
                .header("apiKey", apiKey)
                .header("apiCode", "00005")
                .header("timeStamp", timeStamp)
                .header("sign", md5DigestAsHex)
                .queryString("idKey",applyReinsCode)
                .execute()
                .asString();

        Map<String, Object> res = JSON.parseObject(responseData, Map.class);

        if ((Integer) res.get("status") != NumberEnum.ZERO.getCode()) {

            throw new BusinessException("介面失敗");
        }

普通表單POST

一般POST提交都是基於表單提交,即提交的時候會攜帶Content-Type="application/x-www-form-urlencoded"使用方式如下:

    String timeStamp = String.valueOf(System.currentTimeMillis() / NumberEnum.THOUSAND.getCode());

    String md5DigestAsHex = DigestUtils.md5DigestAsHex((apiKey + "00005" + timeStamp + salt).getBytes());

    String responseData = HttpClient
            .post(url + "/piccre/aml-server/api/aml/outside/v1/getRiskGradeHis")
            .header("apiKey", apiKey)
            .header("apiCode", "00005")
            .header("timeStamp", timeStamp)
            .header("sign", md5DigestAsHex)
            .param("idKey","小勾")
            .param("age","18")
            .execute()
            .asString();

    Map<String, Object> res = JSON.parseObject(responseData, Map.class);

    if ((Integer) res.get("status") != NumberEnum.ZERO.getCode()) {

        throw new BusinessException("介面失敗");
    }

String提交POST

所謂String提交POST,就是將一段字串直接扔進Request請求中,字串一般都是有格式約定的,比如是xml、json或其他等。
比如像微信開放平臺(https://mp.weixin.qq.com/)的介面,所有資料提交方式就是這種。

        String timeStamp = String.valueOf(System.currentTimeMillis() / NumberEnum.THOUSAND.getCode());

        String md5DigestAsHex = DigestUtils.md5DigestAsHex((apiKey + "00003" + timeStamp + salt).getBytes());

        String responseData = HttpClient
                .textBody(url + "/piccre/aml-server/api/aml/outside/v1/getRiskResult")
                .header("apiKey", apiKey)
                .header("apiCode", "00003")
                .header("timeStamp", timeStamp)
                .header("sign", md5DigestAsHex)
                .json(JSON.toJSONString(antiMoneyLaunderDto))
                .execute()
                .asString();

        Map<String, Object> res = JSON.parseObject(responseData, Map.class);

        if ((Integer) res.get("status") != NumberEnum.ZERO.getCode()) {

            throw new BusinessException("介面失敗");
        }