Java-http请求工具-OkHttp用法
前言:一般Java项目后端发送请求都使用http,最近项目里面大佬建议把http都改成okhttp3(OkHttpClient)。故今日记录部分常用发送方式。
代码:为了便于以后使用,这里封装一个OkHttpUtil的工具类
1、先导入jar包:
dependency
groupIdcom.squareup.okhttp3/groupId
artifactIdokhttp/artifactId
version3.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, MapString,String mapParam){
try {
long startTime = System.currentTimeMillis();
//循环form表单,将表单内容添加到form builder中
FormBody.Builder formBody = new FormBody.Builder();
for (Map.EntryString, 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用法 相关文章
轻量级压测工具hey
项目Hub地址 https://github.com/rakyll/hey 二进制安装 Linux 64-bit: https://storage.googleapis.com/hey-release/hey_linux_amd64Mac 64-bit: https://storage.googleapis.com/hey-release/hey_darwin_amd64Windows 64-bit: https://storage.googleapis.
Jenkins常用构建工具
Jenkins构建工具集成 Maven Maven下载地址 安装步骤: # 解压[root@C7-01 ~]# tar xvf apache-maven-3.6.3-bin.tar.gz -C /usr/local/# 软连接[root@C7-01 ~]# cd /usr/local/[root@C7-01 local]# ln -s apache-maven-3.6.3 maven# 添加环境变量[root@C7-01
Unity3D_从零开始设计一个RPG游戏(1)工具类系统设计-Log-01日志输出工具
任何一个游戏都会有一些基础的工具,举例来说,比如事件管理,日志输出工具,状态机,行为树,数学库,MD5工具等等,Log日志工具代码 #if UNITY_EDITOR#define DEBUG#endifusing UnityEngine;using System.Collections.Generic;using System;using System.Di
JVM调优参数、方法、工具总结
垃圾回收有关参数 参数部分,这儿只是做一个总结,更详细更新的内容请参考Oracle官网:JVM的命令行参数参考 处理器组合参数 关于JVM垃圾处理器区别,参考:JVM调优之垃圾定位、垃圾回收算法、垃圾处理器对比 -XX:+UseSerialGC = Serial New (DefNew) + Serial Old
专业Java报表工具Stimulsoft Reports.Java常见问题解答(二)
Stimulsoft Reports.Java是一个专为在Java应用程序中的报表进行交互和处理的报表工具。 Java技术允许在不同的平台、不同的操作系统和不同的硬件上使用程序。正因为这样,Stimulsoft Reports.Java现在几乎在任何地方都可用,同时还是一个拥有高质量的功能和用
【小工具】yml文件解析器
闲来无事,自己写了一个yml文件解析器 有什么作用呢我的初步想法是java swing组件的可配置化,节省代码量和工作量。 直接上代码: 1. 先写一个基础公共类Base.java 1 package com.clb.test.ymlparser.model; 2 3 import java.util.ArrayList; 4 import java.
JVM调优参数、方法、工具以及案例总结
这种文章挺难写的,一是JVM参数巨多,二是内容枯燥乏味,但是想理解JVM调优又是没法避开的环节,本文主要用来总结梳理便于以后翻阅,主要围绕四个大的方面展开,分别是JVM调优参数、JVM调优方法(流程)、JVM调优工具、JVM调优案例,调优案例目前正在分析,会在将来补
Struts2
前端代码演示 %--前端带上参数请求struts.xml配置文件中的hello--%%@ page contentType="text/html;charset=UTF-8" language="java" %%@taglib prefix="s" uri="/struts-tags" %htmlhead titleindex/title %@include file="./common.jsp"%/headbodyform clas
被收费绘图工具 PUA 了怎么办来看看这个老实工具吧
本文非常适合 Electron 入门选手,墙裂推荐! 本文作者:HelloGitHub- 蔡文心 大家好!这里是 HelloGitHub 推出的《讲解开源项目》系列,今天给大家带来的一款基于 Electron 和 PHP 实现的 桌面脑图工具 开源项目—— DesktopNaotu 。 不知道各位小伙伴有没
33 Spring Cloud Zuul过滤器介绍及使用(传递数据、拦截请求和异常处理)
在教程《Zuul网关的介绍及使用》中一开始就介绍过,Zuul 可以实现很多高级的功能,比如限流、认证等。想要实现这些功能,必须要基于 Zuul 给我们提供的核心组件“过滤器”。 过滤器类型 Zuul 中的过滤器跟我们之前使用的 javax.servlet.Filter 不一样,javax