OkHttp3封装第二版

  • 1.导入依赖
  • 2.application.properties
  • 3.config类
  • 4.utils类
  • 5.连接Nifi测试

1.导入依赖

        <dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>4.9.1</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.12.0</version></dependency>

我的实体类需要使用@NotEmpty

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>

2.application.properties

server.port=8081ok.http.connect-timeout=100
ok.http.read-timeout=100
ok.http.write-timeout=100
ok.http.max-idle-connections=100
ok.http.keep-alive-duration=100

3.config类

import okhttp3.ConnectionPool;
import okhttp3.OkHttpClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.concurrent.TimeUnit;@Configuration
public class OkHttpConfig {@Value("${ok.http.connect-timeout}")private Integer connectTimeout;@Value("${ok.http.read-timeout}")private Integer readTimeout;@Value("${ok.http.write-timeout}")private Integer writeTimeout;@Value("${ok.http.max-idle-connections}")private Integer maxIdleConnections;@Value("${ok.http.keep-alive-duration}")private Long keepAliveDuration;@Beanpublic OkHttpClient okHttpClient() {return new OkHttpClient.Builder().sslSocketFactory(sslSocketFactory(), x509TrustManager())// 是否开启缓存.retryOnConnectionFailure(false).connectionPool(pool()).connectTimeout(connectTimeout, TimeUnit.SECONDS).readTimeout(readTimeout, TimeUnit.SECONDS).writeTimeout(writeTimeout,TimeUnit.SECONDS).hostnameVerifier((hostname, session) -> true).build();}@Beanpublic X509TrustManager x509TrustManager() {return new X509TrustManager() {@Overridepublic void checkClientTrusted(X509Certificate[] chain, String authType)throws CertificateException {}@Overridepublic void checkServerTrusted(X509Certificate[] chain, String authType)throws CertificateException {}@Overridepublic X509Certificate[] getAcceptedIssuers() {return new X509Certificate[0];}};}@Beanpublic SSLSocketFactory sslSocketFactory() {try {// 信任任何链接SSLContext sslContext = SSLContext.getInstance("TLS");sslContext.init(null, new TrustManager[]{x509TrustManager()}, new SecureRandom());return sslContext.getSocketFactory();} catch (NoSuchAlgorithmException | KeyManagementException e) {e.printStackTrace();}return null;}@Beanpublic ConnectionPool pool() {return new ConnectionPool(maxIdleConnections, keepAliveDuration, TimeUnit.SECONDS);}}

4.utils类

import lombok.extern.slf4j.Slf4j;
import okhttp3.*;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import java.util.Map;@Slf4j
@Component
public class OkHttpUtils {private static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");private static final MediaType XML = MediaType.parse("application/xml; charset=utf-8");@Autowiredprivate OkHttpClient okHttpClient;/*** get 请求* @param url       请求url地址* @return string* */public String doGet(String url) {return doGet(url, null, null);}/*** get 请求* @param url       请求url地址* @param params    请求参数 map* @return string* */public String doGet(String url, Map<String, String> params) {return doGet(url, params, null);}/*** get 请求* @param url       请求url地址* @param headers   请求头字段 {k1, v1 k2, v2, ...}* @return string* */public String doGet(String url, String[] headers) {return doGet(url, null, headers);}/*** get 请求* @param url       请求url地址* @param params    请求参数 map* @param headers   请求头字段 {k1, v1 k2, v2, ...}* @return string* */public String doGet(String url, Map<String, String> params, String[] headers) {StringBuilder sb = new StringBuilder(url);if (params != null && params.keySet().size() > 0) {boolean firstFlag = true;for (String key : params.keySet()) {if (firstFlag) {sb.append("?").append(key).append("=").append(params.get(key));firstFlag = false;} else {sb.append("&").append(key).append("=").append(params.get(key));}}}Request.Builder builder = new Request.Builder();if (headers != null && headers.length > 0) {if (headers.length % 2 == 0) {for (int i = 0; i < headers.length; i = i + 2) {builder.addHeader(headers[i], headers[i + 1]);}} else {log.warn("headers's length[{}] is error.", headers.length);}}Request request = builder.url(sb.toString()).build();log.info("do get request and url[{}]", sb.toString());return execute(request);}/*** post 请求* @param url       请求url地址* @param params    请求参数 map* @return string*/public String doPost(String url, Map<String, String> params) {FormBody.Builder builder = new FormBody.Builder();if (params != null && params.keySet().size() > 0) {for (String key : params.keySet()) {builder.add(key, params.get(key));}}Request request = new Request.Builder().url(url).post(builder.build()).build();log.info("do post request and url[{}]", url);return execute(request);}/*** post 请求, 请求数据为 json 的字符串* @param url       请求url地址* @param json      请求数据, json 字符串* @return string*/public String doPostJson(String url, String json) {log.info("do post request and url[{}]", url);return exectePost(url, json, JSON);}/*** post 请求, 请求数据为 xml 的字符串* @param url       请求url地址* @param xml       请求数据, xml 字符串* @return string*/public String doPostXml(String url, String xml) {log.info("do post request and url[{}]", url);return exectePost(url, xml, XML);}private String exectePost(String url, String data, MediaType contentType) {RequestBody requestBody = RequestBody.create(contentType, data);Request request = new Request.Builder().url(url).post(requestBody).build();return execute(request);}private String execute(Request request) {Response response = null;try {response = okHttpClient.newCall(request).execute();if (response.isSuccessful()) {return response.body().string();}} catch (Exception e) {log.error(ExceptionUtils.getStackTrace(e));} finally {if (response != null) {response.close();}}return "";}
}

5.连接Nifi测试

     <dependency><groupId>org.apache.nifi</groupId><artifactId>nifi-api</artifactId><version>1.15.0</version><scope>provided</scope></dependency>
nifi.url=https://10xxxxxx9:18080/nifi-api
nifi.user=xxxxx
nifi.password=xxxxx

@Component
public class ETLServer {@Value("${nifi.url}")private String url;@Value("${nifi.user}")private String username;@Value("${nifi.password}")private String password;@Autowiredprivate OkHttpUtils okHttpUtils;public String getToken(){String requestUrl = url+"/access/token";Map<String,String> logMessageMap = new HashMap<>();logMessageMap.put("username",username);logMessageMap.put("password",password);return okHttpUtils.doPost(requestUrl, logMessageMap);}public CommonEntity getCommonEntity(){CommonEntity commonEntity = new CommonEntity();commonEntity.setUrl(url);commonEntity.setAccessToken(getToken());return commonEntity;}
}
@Data
public class CommonEntity {@NotEmpty(message = "url must not be empty")private String url;@NotEmpty(message = "accessToken must not be empty")private String accessToken;}

2021-12-23:又发现了Forest框架,更简单的封装
Forest Http使用分享: https://blog.csdn.net/weixin_43916074/article/details/122078318.

OkHttp3封装第二版相关推荐

  1. 整理对应_JSP第二版课后习题答案【侵权联系我删除】

    JSP第二版课后习题下载:https://download.csdn.net/download/weixin_42859280/11265785 JSP第二版课后习题答案下载:https://down ...

  2. Python 程序设计(第二版)董付国_清华大学出版社_习题答案与分析【针对8.4及其之前的】

    更多精彩内容:(没有设置公众号获得,麻烦动动小手~谢谢) CSDN下载:Python编程无师自通电子书,[美]科里·奥尔索夫(Cory Althoff)-文档类-CSDN下载 百度云:链接:https ...

  3. 【译】JavaScript 核心(第二版)

    原文:JavaScript. The Core: 2nd Edition 作者:Dmitry Soshnikov 文章其他语言版本:俄语 这篇文章是 JavaScript. The Core 演讲的第 ...

  4. 拒绝从入门到放弃_《Python 核心编程 (第二版)》必读目录

    目录 目录 关于这本书 必看知识点 最后 关于这本书 <Python 核心编程 (第二版)>是一本 Python 编程的入门书,分为 Python 核心(其实并不核心,应该叫基础) 和 高 ...

  5. 《信息存储与管理(第二版):数字信息的存储、管理和保护》—— 2.6 磁盘驱动部件...

    本节书摘来异步社区<信息存储与管理(第二版):数字信息的存储.管理和保护>一书中的第2章,第2.6节,作者:[新加坡]G.Somasundaram ,[美]Alok Shrivastava ...

  6. 房屋出租系统(第二版)

    目录 第二版 第二版 基本介绍 在第二版的房屋出租系统中,我们使用的数据库来存放,信息相比较第一版,第二版更加的简单,只需要完成一些对应的增删改查即可,第一版中我们要删除某个房屋对房屋的编号,我们还要 ...

  7. 《Java程序设计与数据结构教程(第二版)》学习指导

    <Java程序设计与数据结构教程(第二版)>学习指导 目录 图书简况 学习指导 第一章 绪论 第二章 数据和表达式 第三章 使用类和对象 第四章 条件和循环 第五章 编写类 第六章 图形用 ...

  8. 程序员代码面试指南第二版 4.猫狗队列

    welcome to my blog 程序员代码面试指南第二版 4.猫狗队列 题目描述 题目描述 实现一种猫狗队列的结构,要求如下: 1. 用户可以调用 add 方法将 cat 或者 dog 放入队列 ...

  9. 《Three.js 开发指南》源码示例说明以及在线demo(原书第二版)附第三版的代码下载

    <Three.js 开发指南>基于原书第二版 源码来自华章出版社官网随书源码,修改替换了其中不能跑的示例,保证每个demo都可以运行. 源码以及示例说明下载: git下载地址 huazha ...

最新文章

  1. LED液晶与OLED:电视显示技术比较
  2. redis del清除缓存java_redis zset集合操作缓存.java
  3. (转)基于即时通信和LBS技术的位置感知服务(一):提出问题及解决方案
  4. 位域 bit-fields C的重要数据结构
  5. matlab 删除路径_MATLAB使用教程(一)—新手来看
  6. centos ping不通百度 ping不通外网
  7. Docker网络-(六)
  8. webpack 报错 path is not defind
  9. Android UI开发第四十一篇——墨迹天气3.0引导界面及动画实现
  10. PHP 运行 php-fpm 报错
  11. 推理集 —— 特殊的空间
  12. jms是java平台中面向_面向Web的JMS应用系统
  13. html怎么获取手机mac地址,js获取mac地址_Js获取客户端IP地址与MAC地址
  14. 老龄化带来新机遇 银发经济实力不容小觑
  15. word2019关闭时无响应
  16. LabVIEW编程LabVIEW控制GPS例程与相关资料
  17. Unity3D IAP Google支付
  18. Google Chrome 浏览器最新版本 71.0.3578.98(正式版本) (64 位)
  19. 计算机按键 shift的作用,电脑shift键的十一个妙用
  20. uinavgationcontroller

热门文章

  1. python工具类-selenium 浏览器封装
  2. android 密度像素,Android屏幕密度适配问题之px,dp,sp等详细介绍
  3. FRR、FAR和ERR
  4. 《CSDN 涨粉攻略》11个涨粉方法,你学会了几个?
  5. SEO人员,如何拨乱反正?
  6. VS2005的include,library,src等路径自动设置
  7. 对话 MySQL 之父 Monty:超越 MySQL 很难,但我做到了!
  8. change lan.php lanid,天融信负载均衡本地文件包含漏洞
  9. windows禁用f1按键
  10. 岁月无情,一去兮不复返