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