This is an automated email from the ASF dual-hosted git repository.

corgy pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/seatunnel.git


The following commit(s) were added to refs/heads/dev by this push:
     new 8da0a78c1d [Fix][Connector-HTTP] Add default content-type when user 
not set (#9497)
8da0a78c1d is described below

commit 8da0a78c1dfb729efee54812f33c88f0e9cbf4bb
Author: alberne wang <[email protected]>
AuthorDate: Mon Jul 14 13:19:30 2025 +0800

    [Fix][Connector-HTTP] Add default content-type when user not set (#9497)
---
 .../seatunnel/http/client/HttpClientProvider.java  |  5 +++
 .../http/client/HttpClientProviderTest.java        | 36 +++++++++++++++++++++-
 2 files changed, 40 insertions(+), 1 deletion(-)

diff --git 
a/seatunnel-connectors-v2/connector-http/connector-http-base/src/main/java/org/apache/seatunnel/connectors/seatunnel/http/client/HttpClientProvider.java
 
b/seatunnel-connectors-v2/connector-http/connector-http-base/src/main/java/org/apache/seatunnel/connectors/seatunnel/http/client/HttpClientProvider.java
index dedac81ab1..07e45b0dec 100644
--- 
a/seatunnel-connectors-v2/connector-http/connector-http-base/src/main/java/org/apache/seatunnel/connectors/seatunnel/http/client/HttpClientProvider.java
+++ 
b/seatunnel-connectors-v2/connector-http/connector-http-base/src/main/java/org/apache/seatunnel/connectors/seatunnel/http/client/HttpClientProvider.java
@@ -489,6 +489,11 @@ public class HttpClientProvider implements AutoCloseable {
                 request.setEntity(new UrlEncodedFormEntity(parameters, 
ENCODING));
             }
         } else {
+            // if user no define content-type, set default content-type
+            if (!request.containsHeader(HTTP.CONTENT_TYPE)) {
+                request.addHeader(HTTP.CONTENT_TYPE, APPLICATION_JSON);
+            }
+
             StringEntity entity =
                     new StringEntity(JsonUtils.toJsonString(body), 
ContentType.APPLICATION_JSON);
             request.setEntity(entity);
diff --git 
a/seatunnel-connectors-v2/connector-http/connector-http-base/src/test/java/org/apache/seatunnel/connectors/seatunnel/http/client/HttpClientProviderTest.java
 
b/seatunnel-connectors-v2/connector-http/connector-http-base/src/test/java/org/apache/seatunnel/connectors/seatunnel/http/client/HttpClientProviderTest.java
index c2ebcff1ca..6b8bdaacc4 100644
--- 
a/seatunnel-connectors-v2/connector-http/connector-http-base/src/test/java/org/apache/seatunnel/connectors/seatunnel/http/client/HttpClientProviderTest.java
+++ 
b/seatunnel-connectors-v2/connector-http/connector-http-base/src/test/java/org/apache/seatunnel/connectors/seatunnel/http/client/HttpClientProviderTest.java
@@ -18,6 +18,7 @@ package org.apache.seatunnel.connectors.seatunnel.http.client;
 
 import org.apache.http.Header;
 import org.apache.http.client.methods.HttpPost;
+import org.apache.http.message.BasicHeader;
 
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
@@ -25,8 +26,40 @@ import org.junit.jupiter.api.Test;
 import java.util.HashMap;
 import java.util.Map;
 
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+
 class HttpClientProviderTest {
 
+    @Test
+    void testAddDefaultJsonContentTypeWhenNotPresent() throws Exception {
+        HttpPost mockRequest = new HttpPost("http://localhost:8080";);
+        Map<String, Object> body = new HashMap<>();
+        body.put("key", "value");
+
+        HttpClientProvider.addBody(mockRequest, body);
+
+        // case 1: user not define content-type, use default content type
+        assertNotNull(mockRequest.getFirstHeader("Content-Type"));
+        Assertions.assertEquals(
+                "application/json", 
mockRequest.getFirstHeader("Content-Type").getValue());
+    }
+
+    @Test
+    void testPreserveExistingContentType() throws Exception {
+        HttpPost mockRequest = new HttpPost("http://localhost:8080";);
+        mockRequest.addHeader(new BasicHeader("Content-Type", "text/plain"));
+
+        Map<String, Object> body = new HashMap<>();
+        body.put("key", "value");
+
+        HttpClientProvider.addBody(mockRequest, body);
+
+        // case 2: if user define content-type, set it
+        assertNotNull(mockRequest.getFirstHeader("Content-Type"));
+        Assertions.assertEquals(
+                "text/plain", 
mockRequest.getFirstHeader("Content-Type").getValue());
+    }
+
     @Test
     void addBody() throws Exception {
         HttpPost post = new HttpPost("http://localhost:8080";);
@@ -36,7 +69,8 @@ class HttpClientProviderTest {
 
         // ensure the original headers are preserved
         Header[] currentHeaders = post.getAllHeaders();
-        Assertions.assertEquals(originalHeaders.length, currentHeaders.length);
+        Assertions.assertEquals(0, originalHeaders.length);
+        Assertions.assertEquals(1, currentHeaders.length);
         for (int i = 0; i < originalHeaders.length; i++) {
             Assertions.assertEquals(
                     originalHeaders[i].getName(),

Reply via email to