feature: Content-Type charset 기반 인바운드/아웃바운드 인코딩 처리
This commit is contained in:
@@ -235,3 +235,6 @@ gradle-app.setting
|
|||||||
# End of https://www.gitignore.io/api/java,macos,gradle,intellij
|
# End of https://www.gitignore.io/api/java,macos,gradle,intellij
|
||||||
/EAISIMWeb/
|
/EAISIMWeb/
|
||||||
/.apt_generated_tests/
|
/.apt_generated_tests/
|
||||||
|
|
||||||
|
# Claude Code
|
||||||
|
.claude/
|
||||||
|
|||||||
@@ -242,7 +242,17 @@ public class DJErpApiAdapterService extends HttpAdapterServiceSupport {
|
|||||||
byte[] data = new byte[bb.position()];
|
byte[] data = new byte[bb.position()];
|
||||||
bb.position(0);
|
bb.position(0);
|
||||||
bb.get(data);
|
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) {
|
if (traceLevel >= 3) {
|
||||||
HttpMemoryLogger.txlog(adptGrpName + adptName,
|
HttpMemoryLogger.txlog(adptGrpName + adptName,
|
||||||
|
|||||||
+17
-1
@@ -34,6 +34,7 @@ import org.json.simple.JSONArray;
|
|||||||
import org.json.simple.JSONObject;
|
import org.json.simple.JSONObject;
|
||||||
import org.json.simple.JSONValue;
|
import org.json.simple.JSONValue;
|
||||||
import org.springframework.http.HttpHeaders;
|
import org.springframework.http.HttpHeaders;
|
||||||
|
import org.springframework.http.MediaType;
|
||||||
import org.springframework.web.util.UriComponents;
|
import org.springframework.web.util.UriComponents;
|
||||||
import org.springframework.web.util.UriComponentsBuilder;
|
import org.springframework.web.util.UriComponentsBuilder;
|
||||||
|
|
||||||
@@ -315,8 +316,23 @@ public class HttpClient5AdapterServiceBypass extends HttpClient5AdapterServiceSu
|
|||||||
HttpMemoryLogger.txlog(vo.getAdapterGroupName() + vo.getAdapterName(),
|
HttpMemoryLogger.txlog(vo.getAdapterGroupName() + vo.getAdapterName(),
|
||||||
"RECV [Bypass Request..]" + CommonLib.getDumpMessage(responseMessage));
|
"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);
|
assignRelayDataToInbound(tempProp, responseHeaders, status);
|
||||||
return responseMessage;
|
return responseMessage != null ? new String(responseMessage, responseEncode) : "";
|
||||||
} catch (SocketTimeoutException ste) {
|
} catch (SocketTimeoutException ste) {
|
||||||
if (vo.getTraceLevel() >= 3) {
|
if (vo.getTraceLevel() >= 3) {
|
||||||
HttpMemoryLogger.error(vo.getAdapterGroupName() + vo.getAdapterName(),
|
HttpMemoryLogger.error(vo.getAdapterGroupName() + vo.getAdapterName(),
|
||||||
|
|||||||
Reference in New Issue
Block a user