From 38291612d417fefa096eecc7c795f5e0279ed11d Mon Sep 17 00:00:00 2001
From: lsh <lsh@163.com>
Date: 星期四, 13 十一月 2025 15:22:16 +0800
Subject: [PATCH] *
---
src/main/java/com/zy/common/utils/HttpHandler.java | 87 +++++++++++++++++++++++++++++++++++--------
1 files changed, 71 insertions(+), 16 deletions(-)
diff --git a/src/main/java/com/zy/common/utils/HttpHandler.java b/src/main/java/com/zy/common/utils/HttpHandler.java
index 70adcc7..87814c9 100644
--- a/src/main/java/com/zy/common/utils/HttpHandler.java
+++ b/src/main/java/com/zy/common/utils/HttpHandler.java
@@ -1,8 +1,6 @@
package com.zy.common.utils;
-
import okhttp3.*;
-
import java.io.IOException;
import java.util.Map;
import java.util.Optional;
@@ -16,7 +14,8 @@
public class HttpHandler {
private static final Integer DEFAULT_TIMEOUT_SECONDS = 5;
- private static final MediaType MEDIA_TYPE = MediaType.parse("application/json;charset=utf-8");
+ private static final MediaType MEDIA_TYPE_JSON = MediaType.parse("application/json;charset=utf-8");
+ private static final MediaType MEDIA_TYPE_FORM = MediaType.parse("application/x-www-form-urlencoded;charset=utf-8");
private String uri;
private String path;
@@ -26,6 +25,7 @@
private boolean https;
private Integer timeout;
private TimeUnit timeUnit;
+ private boolean useFormUrlEncoded; // 鏂板锛氭爣璇嗘槸鍚︿娇鐢▁-www-form-urlencoded鏍煎紡
public HttpHandler(Builder builder){
this.uri = builder.uri;
@@ -36,6 +36,7 @@
this.https = builder.https;
this.timeout = builder.timeout;
this.timeUnit = builder.timeUnit;
+ this.useFormUrlEncoded = builder.useFormUrlEncoded; // 鏂板
}
/**
@@ -62,32 +63,80 @@
public String doPost() throws IOException {
Request request;
Request.Builder headerBuilder = new Request.Builder();
+
+ // 璁剧疆璇锋眰澶�
if (headers != null && headers.size()>0){
for (Map.Entry<String, Object> entry : headers.entrySet()){
headerBuilder.addHeader(entry.getKey(), String.valueOf(entry.getValue()));
}
}
- if (json == null || "".equals(json)){
- FormBody.Builder builder = new FormBody.Builder();
- for (Map.Entry<String, Object> entry : params.entrySet()){
- builder.add(entry.getKey(), String.valueOf(entry.getValue()));
+
+ // 鏍规嵁useFormUrlEncoded鏍囧織閫夋嫨璇锋眰浣撴牸寮�
+ if (useFormUrlEncoded) {
+ // 浣跨敤x-www-form-urlencoded鏍煎紡[1,2,6](@ref)
+ FormBody.Builder formBuilder = new FormBody.Builder();
+
+ if (params != null && !params.isEmpty()) {
+ // 娣诲姞琛ㄥ崟鍙傛暟[2,6,7](@ref)
+ for (Map.Entry<String, Object> entry : params.entrySet()) {
+ formBuilder.add(entry.getKey(), String.valueOf(entry.getValue()));
+ }
+ } else if (json != null && !json.isEmpty()) {
+ // 濡傛灉鎻愪緵浜唈son瀛楃涓诧紝灏濊瘯瑙f瀽涓洪敭鍊煎锛堢畝鍗曞疄鐜帮級
+ // 娉ㄦ剰锛氳繖閲岄渶瑕佹牴鎹疄闄呮儏鍐佃皟鏁磈son瑙f瀽閫昏緫
+ String formattedParams = parseJsonToFormData(json);
+ if (formattedParams != null) {
+ String[] pairs = formattedParams.split("&");
+ for (String pair : pairs) {
+ String[] keyValue = pair.split("=", 2);
+ if (keyValue.length == 2) {
+ formBuilder.add(keyValue[0], keyValue[1]);
+ }
+ }
+ }
}
- FormBody body = builder.build();
+
+ FormBody formBody = formBuilder.build();
request = headerBuilder
.url((https?"https://":"http://")+uri+path)
- .post(body)
+ .post(formBody)
.build();
} else {
- RequestBody body = RequestBody.create(MEDIA_TYPE, json);
- Request.Builder builder = headerBuilder.url((https?"https://":"http://")+uri+path);
- builder.header("Content-Type", "application/json;charset=UTF-8");
- request = builder.post(body).build();
-
+ // 鍘熸湁鐨凧SON鏍煎紡澶勭悊
+ if (json == null || "".equals(json)){
+ FormBody.Builder builder = new FormBody.Builder();
+ for (Map.Entry<String, Object> entry : params.entrySet()){
+ builder.add(entry.getKey(), String.valueOf(entry.getValue()));
+ }
+ FormBody body = builder.build();
+ request = headerBuilder
+ .url((https?"https://":"http://")+uri+path)
+ .post(body)
+ .build();
+ } else {
+ RequestBody body = RequestBody.create(MEDIA_TYPE_JSON, json);
+ Request.Builder builder = headerBuilder.url((https?"https://":"http://")+uri+path);
+ builder.header("Content-Type", "application/json;charset=UTF-8");
+ request = builder.post(body).build();
+ }
}
+
Call call = getClient(timeout, timeUnit).newCall(request);
Response response = call.execute();
return response.body().string();
+ }
+ /**
+ * 灏咼SON瀛楃涓茶浆鎹负琛ㄥ崟鏁版嵁鏍煎紡锛堢畝鏄撳疄鐜帮級
+ * @param json JSON瀛楃涓�
+ * @return 琛ㄥ崟鏁版嵁瀛楃涓�
+ */
+ private String parseJsonToFormData(String json) {
+ // 绠�鏄撳疄鐜帮細绉婚櫎JSON鐨勫ぇ鎷彿鍜屽紩鍙凤紝鏇挎崲鍐掑彿涓虹瓑鍙凤紝閫楀彿涓�&
+ // 娉ㄦ剰锛氬浜庡鏉侸SON闇�瑕佹洿瀹屽杽鐨勮В鏋愰�昏緫
+ return json.replaceAll("[{}\"]", "")
+ .replaceAll(":", "=")
+ .replaceAll(",", "&");
}
/**
@@ -145,12 +194,14 @@
private boolean https;
private Integer timeout;
private TimeUnit timeUnit;
+ private boolean useFormUrlEncoded; // 鏂板锛氭爣璇嗘槸鍚︿娇鐢▁-www-form-urlencoded鏍煎紡
{
// 榛樿5s瓒呮椂
timeout = DEFAULT_TIMEOUT_SECONDS;
timeUnit = TimeUnit.SECONDS;
path = "";
+ useFormUrlEncoded = false; // 榛樿浣跨敤JSON鏍煎紡
}
/**
@@ -208,6 +259,10 @@
return this;
}
+ // 鏂板鏂规硶锛氳缃娇鐢▁-www-form-urlencoded鏍煎紡
+ public Builder setUseFormUrlEncoded(boolean useFormUrlEncoded) {
+ this.useFormUrlEncoded = useFormUrlEncoded;
+ return this;
+ }
}
-
-}
+}
\ No newline at end of file
--
Gitblit v1.9.1