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(),