Java-http请求工具-OkHttp用法
前言:一般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);
}
}
}
参考文章:
完!
Java-http请求工具-OkHttp用法的更多相关文章
- http请求工具-OkHttp用法
OKHttp介绍 okhttp是一个第三方类库,用于android中请求网络.这是一个开源项目,是安卓端最火热的轻量级框架,由移动支付Square公司贡献(该公司还贡献了Picasso和LeakCan ...
- Java http请求工具类
该工具类可以调用POST请求或者Get请求,参数以Map的方式传入,支持获获取返回值,返回值接收类型为String HttpRequestUtil.java package com.util; imp ...
- java HTTP请求工具
package HttpRequestTest; import java.io.BufferedReader; import java.io.InputStream; import java.io.I ...
- java http请求工具整理
处理了http 的get和post的请求,分别支持同步处理,异步处理两种方式下见代码. @Slf4jpublic class HttpUtils { /** * 同步请求http请求 不推荐 * * ...
- Java 发送 Https 请求工具类 (兼容http)
依赖 jsoup-1.11.3.jar <dependency> <groupId>org.jsoup</groupId> <artifactId>js ...
- Http请求工具类(Java原生Form+Json)
package com.tzx.cc.common.constant.util; import java.io.IOException; import java.io.InputStream; imp ...
- java模板模式项目中使用--封装一个http请求工具类
需要调用http接口的代码继承FundHttpTemplate类,重写getParamData方法,在getParamDate里写调用逻辑. 模板: package com.crb.ocms.fund ...
- java jdk原生的http请求工具类
package com.base; import java.io.IOException; import java.io.InputStream; import java.io.InputStream ...
- Java 代码规范,你应该知道的一些工具和用法(转)
转自:http://yifeng.studio/2017/06/30/coding-with-code-style/ Java 代码规范,你应该知道的一些工具和用法 2017-06-30 从事编程这个 ...
- Java 代码规范,你应该知道的一些工具和用法
从事编程这个行业,你一定被别人说过或者说过别人这句话:代码要规范!求职面试时也能从 JD 上看到这个要求:要有良好的编程习惯.其实都是在讲代码规范(Code Style)这件事情. 每个人都有自己的编 ...
随机推荐
- VUE学习-基础(基础语法 & 模板语法)
基础语法 引入vue <!-- 开发环境版本,包含了有帮助的命令行警告 --> <script src="https://cdn.jsdelivr.net/npm/vue/ ...
- Net6的核心组件之中间件
Net6的核心组件之中间件 What is Middleware? 1.广义上来讲:Tomcat.WebLogic.Redis.IIS:狭义上来讲,ASP.NET Core中的中间件指ASP.NET ...
- 开发谷歌插件--web3钱包(一)
之前开发了一款谷歌插件,因为很简单没有什么好记录的. 这次记录下一款新的钱包功能的插件,其中遇到的问题,以及解决方案. 首先遇到的问题就是唤醒: 小狐狸钱包应该都用过,点击图标就会唤起登录页面(pop ...
- java 是值传递还是引用传递
首先要明白,修改一个对象,可以是 修改对象的属性值,也能使建立新的引用(指向另一个对象)两种情况 值传递 在函数调用的过程中,参数是 变量的副本,就是复制出来的一个对象,函数中无论怎么修改和原来的变量 ...
- 天龙八部<三联版>四 终
叶二娘与虚竹相认,但黑衣僧却一语道破天机,原来虚竹乃是叶二娘与少林一位高僧的私生子,而黑衣僧,便是三十年前雁门关外的男主演萧远山,虚竹是萧远山所盗,而原因是因为虚竹的父亲乃是当年的带头大哥.迫于压力玄 ...
- ZSTUOJ刷题⑧:Problem G.--铺地砖
Problem G: 铺地砖 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 6461 Solved: 2592 Description 元旦过去了,新年 ...
- vxe-table 合并单元格
<vxe-table @cell-click="handleClickCell" :span-method="spanMethods" //自动合并单元格 ...
- Ribbon源码
主要功能分析: Ribbon的负载均衡主要通过LoadBalancerClient来实现的,而LoadBalanceClient具体交给了ILoadBalancer来处理,ILoadBalancer通 ...
- C#textbox控件区分扫码枪输入和键盘输入
前言: 一般我们在某个UI界面输入内容的时候又不想人为的去键盘输入,这个时候就需要区分键盘输入和扫码枪的输入,从而禁止人为键盘输入内容,只能使用扫码枪扫码输入.就目前来说这种直插式扫码枪输入和键盘输入 ...
- vue安装与卸载
一.安装最新版本 npm install -g @vue/cli 或 yarn global remove vue-cli 查看版本 vue --version 或 vue -V 二.vue-cli( ...