1. 程式人生 > 程式設計 >Java Http請求工具

Java Http請求工具

Java Rest請求工具

一、新增依賴

<dependency>
    <groupId>cn.gjing</groupId>
    <artifactId>tools-httpclient</artifactId>
    <version>1.2.6</version>
</dependency>
複製程式碼

二、使用說明

返回值型別最好與目標方法一致,否則可能會出現轉換異常,在不確認返回型別時最好使用String去接收。在請求結束後,可以通過get()方法獲取返回的內容,也可以通過listener()

方法指定監聽者去監聽結果返回後的處理邏輯

1、無引數請求

public class Test{
    public static void main(String[] args) {
        String result = HttpClient.builder("http://127.0.0.1:8080/test",HttpMethod.GET,String.class)
                        .execute()
                        .get();
        System.out.println(result);
    }
}
複製程式碼

2、帶請求頭請求

public class Test{
    public static void main(String[] args) {
            Map<String,String> map = new HashMap<>(16);
            map.put("head","111");
            HttpClient.builder("http://127.0.0.1:8080/test6",String.class)
                    .header(map)
                    .execute()
                    .listener(System.out::println);
    }
}
複製程式碼

3、攜帶引數

public class Test{
    public static void main(String[] args) {
        Map<String,Object> param = new HashMap<>();
        param.put("id","1");
        HttpClient.builder("http://127.0.0.1:8080/test6",String.class)
                .param(param)
                .execute()
                .listener(System.out::println);
    }
}
複製程式碼

4、攜帶JSON

可以是JSON字串、Map、JSON對應實體物件,這裡演示通過map傳遞

public class Test{
    public static void main(String[] args) {
        Map<String,String> map = new HashMap<>();
        map.put("key","code");
        map.put("val","200");
        Map resultMap = HttpClient.builder("http://127.0.0.1:8080/test6",HttpMethod.POST,Map.class)
                .body(map)
                .execute()
                .get();
    }
}
複製程式碼

5、設定超時時間

可以分別設定讀超時時間(預設5000ms)和連線超時時間(預設2000ms)

public class Test{
    public static void main(String[] args) {
        Map<String,String.class)
                .param(param)
                //讀超時時間
                .readTimeout(5000)
                //連線超時時間
                .connectTimeout(2000)
                .execute()
                .listener(System.out::println);
    }
}
複製程式碼

6、異常回退

一旦發起請求出現了錯誤會進入該回退,預設丟擲HttpException,你可以自行定義回退邏輯,該方法要在執行execute()請求方法之前呼叫,否則無效。該方法會將錯誤資訊通知給你

public class Test{
    public static void main(String[] args) {
        Map<String,Map.class)
                .body(map)
                .fallback(e -> {
                   throw new ServiceException("哎。回退把");
                })
                .execute()
                .get();
    }
}
複製程式碼

三、 UrlUtils工具類

1、url拼接

Url拼接,返回結果格式如: http://xxx/param1/param2

    public static void main(String[] args) {
        String url = "http://127.0.0.1:8080/";
        Object[] param = {1,2,3,4};
        UrlUtil.urlAppend(url,param);
    }
複製程式碼

2、引數排序

引數按照欄位名的Unicode碼從小到大排序(字典序),得到的結果格式如: a=引數1&b=引數2

    public static void main(String[] args) {
        Map<String,Object> map = new HashMap<>(16);
        map.put("a","引數1");
        map.put("b","引數2");
        UrlUtil.paramUnicodeSort(map,false,false);
    }
複製程式碼

引數說明

引數 描述
paramMap 引數
urlEncode 是否進行URL編碼
keyToLower 轉換後的引數的key值是否要轉為小寫

3、url引數轉map

將URL地址後帶的引數轉成map

    public static void main(String[] args) {
        String url = "http://127.0.0.1:8080?a=2&b=2";
        UrlUtil.toMap(url);
    }
複製程式碼

專案原始碼可前往GitHUb檢視:tools-httpclient