前言:一般Java项目后端发送请求都使用http,最近项目里面大佬建议把http都改成okhttp3(OkHttpClient)。故今日记录部分常用发送方式。

代码:为了便于以后使用,这里封装一个OkHttpUtil的工具类

   1、先导入jar包:

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

  2、OkHttpUtil的工具类:

package cn.wj.fdata.util;

import com.alibaba.fastjson.JSON;
import java.io.File;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import lombok.extern.slf4j.Slf4j;
import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import org.apache.commons.lang3.exception.ExceptionUtils; @Slf4j
public class OkHttpUtil { public static final MediaType jsonType = MediaType.parse("application/json; charset=utf-8"); public static final MediaType mediaType = MediaType.parse("application/octet-stream"); public final OkHttpClient okHttpClient = new OkHttpClient.Builder()
.connectTimeout(8000, TimeUnit.MILLISECONDS)
.readTimeout(8000, TimeUnit.MILLISECONDS)
.build(); /**
* 发送post请求通过Form表单形式
*
* @param reqUrl 请求url
* @param mapParam 请求参数
*
*/
private void sendPostByForm(String reqUrl, Map<String,String> mapParam){
try {
long startTime = System.currentTimeMillis();
//循环form表单,将表单内容添加到form builder中
FormBody.Builder formBody = new FormBody.Builder();
for (Map.Entry<String, String> m : mapParam.entrySet()) {
String name = m.getKey();
String value = m.getValue()+"";
formBody.add(name, value);
}
//构建formBody(formBody.build()),将其传入Request请求中
Request.Builder builder = new Request.Builder().url(reqUrl).post(formBody.build());
try(Response response = okHttpClient.newCall(builder.build()).execute()){
String body = response.body().string();
log.info("{} response body:{}", reqUrl.substring(reqUrl.lastIndexOf("/") + 1),
body);
}catch(Exception e){
log.error("调用接口出错\n"+ ExceptionUtils.getMessage(e));
}finally{
long endTime = System.currentTimeMillis();
log.info("{} cost time:{}", reqUrl.substring(reqUrl.lastIndexOf("/") + 1),
(endTime - startTime));
}
} catch (Exception e) {
log.error("error", e);
}
} /**
* 发送post请求通过JSON参数
*
* @param reqUrl 请求url
* @param param 请求参数
*
*/
private void sendPostByJson(String reqUrl, Object param){
try {
String paramStr = JSON.toJSONString(param); RequestBody requestBody = RequestBody.create(jsonType, paramStr);
long startTime = System.currentTimeMillis();
Request.Builder builder = new Request.Builder().url(reqUrl).post(requestBody); try(Response response = okHttpClient.newCall(builder.build()).execute()){
String body = response.body().string();
}catch(Exception e){
log.error("调用接口出错\n"+ ExceptionUtils.getMessage(e));
}finally{
long endTime = System.currentTimeMillis();
log.info("{} cost time:{}", reqUrl.substring(reqUrl.lastIndexOf("/") + 1),
(endTime - startTime));
}
} catch (Exception e) {
log.error("error", e);
}
} /**
* 上传文件
*
* @param reqUrl 请求url
* @param file 上传的文件
* @param fileName 文件名称
*
*/
public void uploadFile(String reqUrl, File file, String fileName) {
try {
RequestBody fileBody = RequestBody.create(mediaType, file);
RequestBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("fileName", fileName)
.addFormDataPart("file", fileName, fileBody).build(); long startTime = System.currentTimeMillis();
Request.Builder builder = new Request.Builder().url(reqUrl).post(requestBody); try(Response response = okHttpClient.newCall(builder.build()).execute()){
String body = response.body().string();
}catch(Exception e){
log.error("调用接口出错\n"+ ExceptionUtils.getMessage(e));
}finally{
long endTime = System.currentTimeMillis();
log.info("{} cost time:{}", reqUrl.substring(reqUrl.lastIndexOf("/") + 1),
(endTime - startTime));
}
} catch (Exception e) {
log.error("error", e);
}
}
}

参考文章:

文章1

文章2

完!

Java-http请求工具-OkHttp用法的更多相关文章

  1. http请求工具-OkHttp用法

    OKHttp介绍 okhttp是一个第三方类库,用于android中请求网络.这是一个开源项目,是安卓端最火热的轻量级框架,由移动支付Square公司贡献(该公司还贡献了Picasso和LeakCan ...

  2. Java http请求工具类

    该工具类可以调用POST请求或者Get请求,参数以Map的方式传入,支持获获取返回值,返回值接收类型为String HttpRequestUtil.java package com.util; imp ...

  3. java HTTP请求工具

    package HttpRequestTest; import java.io.BufferedReader; import java.io.InputStream; import java.io.I ...

  4. java http请求工具整理

    处理了http 的get和post的请求,分别支持同步处理,异步处理两种方式下见代码. @Slf4jpublic class HttpUtils { /** * 同步请求http请求 不推荐 * * ...

  5. Java 发送 Https 请求工具类 (兼容http)

    依赖 jsoup-1.11.3.jar <dependency> <groupId>org.jsoup</groupId> <artifactId>js ...

  6. Http请求工具类(Java原生Form+Json)

    package com.tzx.cc.common.constant.util; import java.io.IOException; import java.io.InputStream; imp ...

  7. java模板模式项目中使用--封装一个http请求工具类

    需要调用http接口的代码继承FundHttpTemplate类,重写getParamData方法,在getParamDate里写调用逻辑. 模板: package com.crb.ocms.fund ...

  8. java jdk原生的http请求工具类

    package com.base; import java.io.IOException; import java.io.InputStream; import java.io.InputStream ...

  9. Java 代码规范,你应该知道的一些工具和用法(转)

    转自:http://yifeng.studio/2017/06/30/coding-with-code-style/ Java 代码规范,你应该知道的一些工具和用法 2017-06-30 从事编程这个 ...

  10. Java 代码规范,你应该知道的一些工具和用法

    从事编程这个行业,你一定被别人说过或者说过别人这句话:代码要规范!求职面试时也能从 JD 上看到这个要求:要有良好的编程习惯.其实都是在讲代码规范(Code Style)这件事情. 每个人都有自己的编 ...

随机推荐

  1. VUE学习-基础(基础语法 & 模板语法)

    基础语法 引入vue <!-- 开发环境版本,包含了有帮助的命令行警告 --> <script src="https://cdn.jsdelivr.net/npm/vue/ ...

  2. Net6的核心组件之中间件

    Net6的核心组件之中间件 What is Middleware? 1.广义上来讲:Tomcat.WebLogic.Redis.IIS:狭义上来讲,ASP.NET Core中的中间件指ASP.NET ...

  3. 开发谷歌插件--web3钱包(一)

    之前开发了一款谷歌插件,因为很简单没有什么好记录的. 这次记录下一款新的钱包功能的插件,其中遇到的问题,以及解决方案. 首先遇到的问题就是唤醒: 小狐狸钱包应该都用过,点击图标就会唤起登录页面(pop ...

  4. java 是值传递还是引用传递

    首先要明白,修改一个对象,可以是 修改对象的属性值,也能使建立新的引用(指向另一个对象)两种情况 值传递 在函数调用的过程中,参数是 变量的副本,就是复制出来的一个对象,函数中无论怎么修改和原来的变量 ...

  5. 天龙八部<三联版>四 终

    叶二娘与虚竹相认,但黑衣僧却一语道破天机,原来虚竹乃是叶二娘与少林一位高僧的私生子,而黑衣僧,便是三十年前雁门关外的男主演萧远山,虚竹是萧远山所盗,而原因是因为虚竹的父亲乃是当年的带头大哥.迫于压力玄 ...

  6. ZSTUOJ刷题⑧:Problem G.--铺地砖

    Problem G: 铺地砖 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 6461  Solved: 2592 Description 元旦过去了,新年 ...

  7. vxe-table 合并单元格

    <vxe-table @cell-click="handleClickCell" :span-method="spanMethods" //自动合并单元格 ...

  8. Ribbon源码

    主要功能分析: Ribbon的负载均衡主要通过LoadBalancerClient来实现的,而LoadBalanceClient具体交给了ILoadBalancer来处理,ILoadBalancer通 ...

  9. C#textbox控件区分扫码枪输入和键盘输入

    前言: 一般我们在某个UI界面输入内容的时候又不想人为的去键盘输入,这个时候就需要区分键盘输入和扫码枪的输入,从而禁止人为键盘输入内容,只能使用扫码枪扫码输入.就目前来说这种直插式扫码枪输入和键盘输入 ...

  10. vue安装与卸载

    一.安装最新版本 npm install -g @vue/cli 或 yarn global remove vue-cli 查看版本 vue --version 或 vue -V 二.vue-cli( ...