From 42cbafd67dc4a4ac424f9029ed3da654180f0fd1 Mon Sep 17 00:00:00 2001 From: curry772 Date: Tue, 7 Apr 2026 10:15:41 +0900 Subject: [PATCH] =?UTF-8?q?feature:=20Content-Type=20charset=20=EA=B8=B0?= =?UTF-8?q?=EB=B0=98=20=EC=9D=B8=EB=B0=94=EC=9A=B4=EB=93=9C/=EC=95=84?= =?UTF-8?q?=EC=9B=83=EB=B0=94=EC=9A=B4=EB=93=9C=20=EC=9D=B8=EC=BD=94?= =?UTF-8?q?=EB=94=A9=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +++ .../service/DJErpApiAdapterService.java | 12 +++++++++++- .../impl/HttpClient5AdapterServiceBypass.java | 18 +++++++++++++++++- 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index df1df98..2336bd7 100644 --- a/.gitignore +++ b/.gitignore @@ -235,3 +235,6 @@ gradle-app.setting # End of https://www.gitignore.io/api/java,macos,gradle,intellij /EAISIMWeb/ /.apt_generated_tests/ + +# Claude Code +.claude/ diff --git a/src/main/java/com/eactive/eai/adapter/service/DJErpApiAdapterService.java b/src/main/java/com/eactive/eai/adapter/service/DJErpApiAdapterService.java index 2662d44..2fde9ef 100644 --- a/src/main/java/com/eactive/eai/adapter/service/DJErpApiAdapterService.java +++ b/src/main/java/com/eactive/eai/adapter/service/DJErpApiAdapterService.java @@ -242,7 +242,17 @@ public class DJErpApiAdapterService extends HttpAdapterServiceSupport { byte[] data = new byte[bb.position()]; bb.position(0); bb.get(data); - paramValue = new String(data, encode); + String bodyEncode = encode; + String contentTypeHeader = request.getContentType(); + if (StringUtils.isNotBlank(contentTypeHeader)) { + try { + MediaType mediaType = MediaType.parseMediaType(contentTypeHeader); + if (mediaType.getCharset() != null) { + bodyEncode = mediaType.getCharset().name(); + } + } catch (Exception ignored) {} + } + paramValue = new String(data, bodyEncode); if (traceLevel >= 3) { HttpMemoryLogger.txlog(adptGrpName + adptName, diff --git a/src/main/java/com/eactive/eai/custom/adapter/http/client/impl/HttpClient5AdapterServiceBypass.java b/src/main/java/com/eactive/eai/custom/adapter/http/client/impl/HttpClient5AdapterServiceBypass.java index 19e6f16..b25ec75 100644 --- a/src/main/java/com/eactive/eai/custom/adapter/http/client/impl/HttpClient5AdapterServiceBypass.java +++ b/src/main/java/com/eactive/eai/custom/adapter/http/client/impl/HttpClient5AdapterServiceBypass.java @@ -34,6 +34,7 @@ import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.JSONValue; import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; import org.springframework.web.util.UriComponents; import org.springframework.web.util.UriComponentsBuilder; @@ -315,8 +316,23 @@ public class HttpClient5AdapterServiceBypass extends HttpClient5AdapterServiceSu HttpMemoryLogger.txlog(vo.getAdapterGroupName() + vo.getAdapterName(), "RECV [Bypass Request..]" + CommonLib.getDumpMessage(responseMessage)); } + // 응답 Content-Type charset 기반 인코딩 결정, 없으면 어댑터 encoding 사용 + String responseEncode = vo.getEncode(); + if (responseHeaders != null) { + for (Header header : responseHeaders) { + if (StringUtils.equalsIgnoreCase(header.getName(), HttpHeaders.CONTENT_TYPE)) { + try { + MediaType mediaType = MediaType.parseMediaType(header.getValue()); + if (mediaType.getCharset() != null) { + responseEncode = mediaType.getCharset().name(); + } + } catch (Exception ignored) {} + break; + } + } + } assignRelayDataToInbound(tempProp, responseHeaders, status); - return responseMessage; + return responseMessage != null ? new String(responseMessage, responseEncode) : ""; } catch (SocketTimeoutException ste) { if (vo.getTraceLevel() >= 3) { HttpMemoryLogger.error(vo.getAdapterGroupName() + vo.getAdapterName(),