| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- package com.zsElectric.boot.common.util;
- import cn.hutool.core.map.MapUtil;
- import cn.hutool.core.util.ObjectUtil;
- import com.google.gson.JsonObject;
- import com.google.gson.JsonParser;
- import lombok.extern.slf4j.Slf4j;
- import okhttp3.*;
- import org.springframework.stereotype.Component;
- import java.io.IOException;
- import java.util.List;
- import java.util.Map;
- @Slf4j
- @Component
- public class OkHttpUtil {
- private final OkHttpClient okHttpClient;
-
- private static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
- public OkHttpUtil(OkHttpClient okHttpClient) {
- this.okHttpClient = okHttpClient;
- }
- /**
- * 执行 GET 请求,返回 JsonObject
- */
- public JsonObject doGet(String url, Map<String, String> headers) throws IOException {
- Request.Builder requestBuilder = new Request.Builder().url(url);
- if (headers != null) {
- headers.forEach(requestBuilder::addHeader);
- }
- Request request = requestBuilder.build();
- try (Response response = okHttpClient.newCall(request).execute()) {
- if (!response.isSuccessful()) {
- throw new IOException("Unexpected code: " + response);
- }
- String responseBody = response.body().string();
- return JsonParser.parseString(responseBody).getAsJsonObject();
- }
- }
- /**
- * 执行 POST 请求(JSON 数据),返回 JsonObject
- */
- public JsonObject doPostJson(String url, String json, Map<String, String> headers) throws IOException {
- RequestBody body = RequestBody.create(json, JSON);
- Request.Builder requestBuilder = new Request.Builder()
- .url(url)
- .post(body);
- if (headers != null) {
- headers.forEach(requestBuilder::addHeader);
- }
- Request request = requestBuilder.build();
- try (Response response = okHttpClient.newCall(request).execute()) {
- if (!response.isSuccessful()) {
- throw new IOException("Unexpected code: " + response);
- }
- String responseBody = response.body().string();
- return JsonParser.parseString(responseBody).getAsJsonObject();
- }
- }
- /**
- * 执行 POST 请求(表单数据),返回 JsonObject
- */
- // public JsonObject doPostForm(String url, Map<String, Object> formData, Map<String, String> headers) throws IOException {
- // FormBody.Builder formBodyBuilder = new FormBody.Builder();
- // if (formData != null) {
- // formData.forEach((k, v) -> formBodyBuilder.add(k, String.valueOf(v)));
- // }
- //
- // Request.Builder requestBuilder = new Request.Builder()
- // .url(url)
- // .addHeader("Content-Type", "application/json; charset=utf-8")
- // .post(formBodyBuilder.build());
- //
- // if (MapUtil.isNotEmpty(headers)) {
- // headers.forEach(requestBuilder::addHeader);
- // }
- //
- // Request request = requestBuilder.build();
- // request.header("Content-Type:application/json; charset=utf-8");
- // log.info("POST 请求 URL: " + url);
- // log.info("POST 请求表单数据: " + formData);
- // try (Response response = okHttpClient.newCall(request).execute()) {
- // if (!response.isSuccessful()) {
- // throw new IOException("Unexpected code: " + response);
- // }
- // String responseBody = response.body().string();
- // return JsonParser.parseString(responseBody).getAsJsonObject();
- // }
- // }
- public JsonObject doPostForm(String url, Map<String, Object> formData, Map<String, String> headers) throws IOException {
- FormBody.Builder formBodyBuilder = new FormBody.Builder();
- if (formData != null) {
- formData.forEach((k, v) -> formBodyBuilder.add(k, String.valueOf(v)));
- }
- Request.Builder requestBuilder = new Request.Builder()
- .url(url)
- .post(formBodyBuilder.build());
- // 正确设置 Content-Type header
- if (MapUtil.isNotEmpty(headers)) {
- headers.forEach(requestBuilder::addHeader);
- }
- // 如果需要覆盖 Content-Type,应该在这里设置
- requestBuilder.addHeader("Content-Type", "application/json");
- Request request = requestBuilder.build();
- log.info("POST 请求 URL: " + url);
- log.info("POST 请求表单数据: " + formData);
- try (Response response = okHttpClient.newCall(request).execute()) {
- if (!response.isSuccessful()) {
- throw new IOException("Unexpected code: " + response);
- }
- String responseBody = response.body().string();
- return JsonParser.parseString(responseBody).getAsJsonObject();
- }
- }
- /**
- * 异步 GET 请求
- */
- public void doGetAsync(String url, Map<String, String> headers, Callback callback) {
- Request.Builder requestBuilder = new Request.Builder().url(url);
- if (headers != null) {
- headers.forEach(requestBuilder::addHeader);
- }
- Request request = requestBuilder.build();
- okHttpClient.newCall(request).enqueue(callback);
- }
- /**
- * 执行 GET 请求,返回字符串(保留原有方法)
- */
- public String doGetAsString(String url, Map<String, String> headers) throws IOException {
- Request.Builder requestBuilder = new Request.Builder().url(url);
- if (headers != null) {
- headers.forEach(requestBuilder::addHeader);
- }
- requestBuilder.addHeader("Content-Type", "application/json");
- Request request = requestBuilder.build();
- try (Response response = okHttpClient.newCall(request).execute()) {
- if (!response.isSuccessful()) {
- throw new IOException("Unexpected code: " + response);
- }
- return response.body().string();
- }
- }
- }
|