http请求工具类

news/2024/10/22 7:29:43/

 一、添加依赖

<dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>4.9.1</version>
</dependency>
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.40</version>
</dependency>
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.11</version>
</dependency>

二、工具类

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import okhttp3.*;
import org.apache.commons.io.FileUtils;
import org.springframework.web.multipart.MultipartFile;import java.io.File;
import java.io.IOException;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.TimeUnit;@Slf4j
public class OkHttpUtil {public static final String MEDIA_TYPE_JSON = "application/json; charset=utf-8";private OkHttpUtil() {}/*** 获取默认的OkHttpClient** @return*/public static OkHttpClient getOkHttpClient() {return getOkHttpClient(60, 60, 60);}public static OkHttpClient getOkHttpClient(int connectTimeout, int readTimeOut, int writeTimeOut) {OkHttpClient.Builder builder = new okhttp3.OkHttpClient().newBuilder();builder.connectTimeout(connectTimeout, TimeUnit.SECONDS);builder.readTimeout(readTimeOut, TimeUnit.SECONDS);builder.writeTimeout(writeTimeOut, TimeUnit.SECONDS);return builder.build();}/*** get请求** @param okHttpClient* @param url* @param headers      header参数* @return*/public static String get(OkHttpClient okHttpClient, String url, Headers headers) {log.info("okHttpClient get url:{}.", url);Request request = new Request.Builder().url(url).headers(headers).get().build();String responseData = request(okHttpClient, url, request);log.info("okHttpClient get url:{},request responseData====> {}", url, responseData);return responseData;}public static String get(OkHttpClient okHttpClient, String url) {Headers headers = new Headers.Builder().build();return get(okHttpClient, url, headers);}/*** GET请求。使用默认的 okHttpClient 和 headers** @param url* @return*/public static String get(String url) {OkHttpClient okHttpClient = getOkHttpClient();Headers headers = new Headers.Builder().build();return get(okHttpClient, url, headers);}/*** post请求,获取响应结果** @param okHttpClient* @param url* @param bodyJson* @param headers* @return*/public static String post(OkHttpClient okHttpClient, String url, JSONObject bodyJson, Headers headers) {log.info("okHttpClient post url:{}, body====> {}", url, bodyJson);MediaType mediaTypeJson = MediaType.parse(MEDIA_TYPE_JSON);RequestBody requestBody = RequestBody.create(mediaTypeJson, JSON.toJSONString(bodyJson));Request request = new Request.Builder().url(url).headers(headers).post(requestBody).build();String responseData = request(okHttpClient, url, request);log.info("okHttpClient post url:{},post responseData====> {}", url, responseData);return responseData;}public static String post(OkHttpClient okHttpClient, String url, JSONObject bodyJson) {Headers headers = new Headers.Builder().build();return post(okHttpClient, url, bodyJson, headers);}/*** post请求。使用默认的 okHttpClient 和 headers** @param url* @param bodyJson* @return*/public static String post(String url, JSONObject bodyJson) {//使用默认的 okHttpClientOkHttpClient okHttpClient = getOkHttpClient();Headers headers = new Headers.Builder().build();//如果需要自定义 okHttpClient或headers传参,可以调用以下方法return post(okHttpClient, url, bodyJson, headers);}/*** 获取响应结果** @param okHttpClient* @param url* @param request* @return*/public static String request(OkHttpClient okHttpClient, String url, Request request) {String responseData = "";try (Response response = okHttpClient.newCall(request).execute()) {if (response != null && response.body() != null) {return response.body().string();}} catch (Exception e) {log.error("okHttpClient getResponse error.url:{}", url, e);}return responseData;}/*** 上传文件** @param okHttpClient okHttp客户端* @param url          上传文件的url* @param fileKey      文件对应的key* @param formDataJson form-data参数* @param headers* @param file* @return*/public static String uploadFile(OkHttpClient okHttpClient, String url,String fileKey, File file, JSONObject formDataJson, Headers headers) {log.info("uploadFile url:{}, uploadFile formDataJson====> {}", url, formDataJson);// 支持传文件的同时,传参数。MultipartBody requestBody = getMultipartBody(fileKey, file, formDataJson);// 构建request请求体Request request = new Request.Builder().url(url).headers(headers).post(requestBody).build();String responseData = request(okHttpClient, url, request);// 会在本地产生临时文件,用完后需要删除if (file.exists()) {file.delete();}return responseData;}/*** 上传文件** @param url* @param fileKey       form-data文件对应的key* @param multipartFile 文件上传对应的 multipartFile* @param formDataJson  form-data参数* @return*/public static String uploadFile(String url,String fileKey, MultipartFile multipartFile, JSONObject formDataJson) {//使用默认的okHttpClientOkHttpClient okHttpClient = getOkHttpClient();Headers headers = new Headers.Builder().build();return uploadFile(okHttpClient, url, fileKey, getFile(multipartFile), formDataJson, headers);}public static String uploadFile(OkHttpClient okHttpClient, String url,String fileKey, File file, JSONObject formDataJson) {Headers headers = new Headers.Builder().build();return uploadFile(okHttpClient, url, fileKey, file, formDataJson, headers);}/*** 上传文件* 使用默认的okHttpClient** @param url* @param fileKey      form-data文件对应的key* @param file         文件* @param formDataJson form-data参数* @return*/public static String uploadFile(String url,String fileKey, File file, JSONObject formDataJson) {//使用默认的okHttpClientOkHttpClient okHttpClient = getOkHttpClient();Headers headers = new Headers.Builder().build();return uploadFile(okHttpClient, url, fileKey, file, formDataJson, headers);}/*** 上传文件用。构建form-data 参数** @param fileKey      文件对应的key* @param file         文件* @param formDataJson form-data参数* @return*/public static MultipartBody getMultipartBody(String fileKey, File file, JSONObject formDataJson) {RequestBody fileBody = RequestBody.create(MultipartBody.FORM, file);MultipartBody.Builder bodyBuilder = new MultipartBody.Builder();// 设置传参为form-data格式bodyBuilder.setType(MultipartBody.FORM);bodyBuilder.addFormDataPart(fileKey, file.getName(), fileBody);// 添加 form-data参数for (Map.Entry<String, Object> entry : formDataJson.entrySet()) {//参数通过 bodyBuilder.addFormDataPart(key, value) 添加bodyBuilder.addFormDataPart(entry.getKey(), Objects.toString(entry.getValue(), ""));}return bodyBuilder.build();}/*** 获取文件** @param multipartFile* @return*/public static File getFile(MultipartFile multipartFile) {File file = new File(Objects.requireNonNull(multipartFile.getOriginalFilename()));try {FileUtils.copyInputStreamToFile(multipartFile.getInputStream(), file);} catch (IOException e) {log.error("copyInputStreamToFile error.", e);}return file;}}


http://www.ppmy.cn/news/1145405.html

相关文章

285_C++_web提取AI告警信息JSON格式

struct Cache_t {AIAlarmFaceInfo Face;AIAlarmPlateInfo Plate;SAISnapedObjInfo Object;SharedCArray Common;int Type; };struct Client_t {Client_t() : AlarmCnt(HA

SparkSQL外部数据源

1.简介 1.1 多数据源支持 Spark 支持以下六个核心数据源,同时 Spark 社区还提供了多达上百种数据源的读取方式,能够满足绝大部分使用场景。 - CSV - JSON - Parquet - ORC - JDBC/ODBC connections - Plain-text files 1.2 读数据格式 所有读取 API 遵循以下调用格式: // …

C++ 类和对象(一)

1.面向过程和面向对象初步认识 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题。 C是基于面向对象的&#xff0c;关注的是对象&#xff0c;将一件事情拆分成不同的对象&#xff0c;靠对象之间的交互完 成。 …

配置Hive使用Spark执行引擎

配置Hive使用Spark执行引擎 Hive引擎概述兼容问题安装SparkSpark配置Hive配置HDFS上传Spark的jar包执行测试速度对比 Hive引擎 概述 在Hive中&#xff0c;可以通过配置来指定使用不同的执行引擎。Hive执行引擎包括&#xff1a;默认MR、tez、spark MapReduce引擎&#xff1a; 早…

大运新能源天津车展深度诠释品牌魅力 为都市人群打造理想车型

如今&#xff0c;新能源汽车行业发展潜力巨大&#xff0c;不断吸引无数车企入驻新能源汽车赛道&#xff0c;而赛道的持续紧缩也让一部分车企很难找到突破重围的机会。秉持几十年的造车经验&#xff0c;大运新能源凭借雄厚的品牌实力从一众车企中脱颖而出。从摩托车到重卡&#…

HTML5+CSSDAY4综合案例一--热词

样式展示图&#xff1a; 代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>热词…

uniapp快速入门系列(3)- CSS技巧与布局

章节三&#xff1a;CSS技巧与布局 1. uniapp中的样式编写2. 常见布局技巧与实例解析2.1 水平居中布局2.2 垂直居中布局2.3 等高布局2.4 响应式布局 3. CSS动画与过渡效果 在uniapp中&#xff0c;我们使用CSS来设置页面的样式和布局。本章将介绍一些在uniapp中常用的CSS技巧和布…

4.02 用户中心-上传头像功能开发

详细内容请看下面地址&#xff1a; 地址&#xff1a;http://www.gxcode.top/code