工具之二次封装OKHTTP,可直接引入项目

763 阅读2分钟

该工具包清晰简单可配置,能用于spring、vertX、Android等框架

使用最低版本为jdk1.8

1. 引入依赖

仓库地址链接

引入maven依赖

<!-- https://mvnrepository.com/artifact/io.github.HollandZang/http -->
<dependency>
    <groupId>io.github.HollandZang</groupId>
    <artifactId>http</artifactId>
    <version>1.1</version>
</dependency>

引入gradle依赖

// https://mvnrepository.com/artifact/io.github.HollandZang/http
implementation group: 'io.github.HollandZang', name: 'http', version: '1.1'

2. 使用方式

配置项

spring引入

可以直接调new ZnHttp()使用默认配置,也可以继承默认实现类DefaultZnHttpConf、或实现配置接口ZnHttpConf

@Configuration
public class MyConfig {

    @Bean
    public ZnHttp znHttp() {
        return new ZnHttp(new DefaultZnHttpConf() {
            @Override
            public void printError(String s, Object... args) {
                logger.error(s,args);
            }

            @Override
            public String toJson(Object data) {
                return JSON.toJSONString(data);
            }
        });
    }
}

默认配置一览

public class DefaultZnHttpConf implements ZnHttpConf {

    @Override
    public OkHttpClient getClient() {
        return new OkHttpClient.Builder()
                .connectTimeout(60, TimeUnit.SECONDS)
                .writeTimeout(60, TimeUnit.SECONDS)
                .readTimeout(60, TimeUnit.SECONDS)
                .build();
    }

    @Override
    public final Request.Builder myRequest(Map<String, String> headers) {
        Request.Builder builder = new Request.Builder()
                .addHeader("Connection", "keep-alive")
                .addHeader("Accept", "*/*");
        if (headers != null) {
            headers.forEach(builder::addHeader);
        }
        return builder;
    }

    @Override
    public void printError(String s, Object... args) {
        final String format = String.format(s.replace("{}", "%s"), args);
        System.err.println(format);
        final Exception exception = (Exception) args[args.length - 1];
        System.err.println(Arrays.stream(exception.getStackTrace()).map(StackTraceElement::toString).collect(Collectors.joining("\n\t")));
    }

    @Override
    public String formatParam(Object param) {
        if (param instanceof Date) {
            final SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            return formatter.format((Date) param);
        } else if (param instanceof LocalDateTime) {
            return DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format((Temporal) param);
        } else if (param instanceof LocalDate) {
            return DateTimeFormatter.ofPattern("yyyy-MM-dd").format((Temporal) param);
        } else if (param instanceof LocalTime) {
            return DateTimeFormatter.ofPattern("HH:mm:ss").format((Temporal) param);
        } else {
            return param.toString();
        }
    }

    @Override
    public String toJson(Object data) {
        final Gson gson = new GsonBuilder()
                .setDateFormat("yyyy-MM-dd HH:mm:ss")
                .create();
        return data != null ? gson.toJson(data) : "";
    }
}

官方示例

同步请求

public class SyncDemo {

    public static void main(String[] args) {
        getDemo();
        postFormDemo();
        postJsonDemo();
    }

    public static void getDemo() {
        final Map<String, Object> data = new HashMap<>();
        data.put("t1", LocalDateTime.now());
        data.put("t2", LocalTime.now());
        data.put("t3", LocalDate.now());

        final Optional<String> s = new ZnHttp().sync.get("http://www.baidu.com", null, data);
        final String s1 = s.orElse("asd");
        System.out.println("getDemo::\n" + s1);
    }

    public static void postFormDemo() {
        final Map<String, Object> data = new HashMap<>();
        data.put("t1", LocalDateTime.now());
        data.put("t2", LocalTime.now());
        data.put("t3", LocalDate.now());

        final Optional<String> s = new ZnHttp().sync.postForm("http://www.baidu.com", null, data);
        final String s1 = s.orElse("asd");
        System.out.println("postFormDemo::\n" + s1);
    }

    public static void postJsonDemo() {
        final Map<String, Object> data = new HashMap<>();
        data.put("t1", LocalDateTime.now());
        data.put("t2", LocalTime.now());
        data.put("t3", LocalDate.now());

        final Optional<String> s = new ZnHttp().sync.postJson("http://www.baidu.com", null, data);
        final String s1 = s.orElse("asd");
        System.out.println("postJsonDemo::\n" + s1);
    }
}

异步请求

public class AsyncDemo {

    public static void main(String[] args) throws InterruptedException {
        getDemo();
        postFormDemo();
        postJsonDemo();

        Thread.sleep(1000);
        System.exit(1);
    }

    public static void getDemo() {
        final Map<String, Object> data = new HashMap<>();
        data.put("t1", LocalDateTime.now());
        data.put("t2", LocalTime.now());
        data.put("t3", LocalDate.now());

        new ZnHttp().async.get("http://www.baidu.com", null, data, response -> {
            try {
                System.out.println("getDemo::\n" + response.body().string());
            } catch (IOException e) {
                e.printStackTrace();
            }
        });
    }

    public static void postFormDemo() {
        final Map<String, Object> data = new HashMap<>();
        data.put("t1", LocalDateTime.now());
        data.put("t2", LocalTime.now());
        data.put("t3", LocalDate.now());

        new ZnHttp().async.get("http://www.baidu.com", null, data, response -> {
            try {
                System.out.println("postFormDemo::\n" + response.body().string());
            } catch (IOException e) {
                e.printStackTrace();
            }
        });
    }

    public static void postJsonDemo() {
        final Map<String, Object> data = new HashMap<>();
        data.put("t1", LocalDateTime.now());
        data.put("t2", LocalTime.now());
        data.put("t3", LocalDate.now());

        new ZnHttp().async.get("http://www.baidu.com", null, data, response -> {
            try {
                System.out.println("postJsonDemo::\n" + response.body().string());
            } catch (IOException e) {
                e.printStackTrace();
            }
        });
    }
}

3. 其他

想要发布自己的jar包到maven仓库吗? 点击链接学习