diff --git a/README.md b/README.md index 69baaec..0ee5576 100644 --- a/README.md +++ b/README.md @@ -52,3 +52,26 @@ java -jar build/libs/elink-test-master.jar 4. path 값이 없이 요청이 가능합니다. + +## 응답 관리 캐릭터 인코딩 + +### 응답 바디의 인코딩 결정 +응답 바디의 인코딩을 적용하는 순서와 우선순위를 설명합니다. 인코딩은 다음과 같은 순서로 결정됩니다: + +1. matchingResponse에서 encodingCharset 확인 + matchingResponse 객체의 encodingCharset이 비어 있지 않으면 해당 값을 사용합니다. + +2. 시스템 속성 'file.encoding' 확인 + matchingResponse 객체의 encodingCharset이 비어 있는 경우, 시스템의 기본 파일 인코딩을 사용합니다. + (System.getProperty("file.encoding")) + +### 응답 CONTENT-TYPE 설정 +1. CONTENT-TYPE 헤더가 없는 경우 + 위에서 결정된 인코딩 charset을 사용하여 text/plain으로 설정합니다. + +2. 기존 CONTENT-TYPE에 charset이 없으면 charset 추가 + CONTENT-TYPE 헤더가 존재하지만 charset이 지정되어 있지 않은 경우, 위에서 결정된 인코딩 charset을 기존 content-type에 추가합니다. + +### 주의사항 +동시에 matchingResponse에 encodingCharset을 지정하고, 응답 헤더의 Content-Type에도 charset을 지정하는 경우, +두개의 charset이 다르면, 응답 바디는 matchingResponse의 encodingCharset을 사용하여, 인코딩 됩니다. diff --git a/src/main/java/com/eactive/testmaster/api/controller/MockApiController.java b/src/main/java/com/eactive/testmaster/api/controller/MockApiController.java index 1b2aeb3..b38553c 100644 --- a/src/main/java/com/eactive/testmaster/api/controller/MockApiController.java +++ b/src/main/java/com/eactive/testmaster/api/controller/MockApiController.java @@ -77,6 +77,10 @@ public class MockApiController { String contentType = responseHeaders.getFirst(HttpHeaders.CONTENT_TYPE); if (!contentType.contains("charset")) { responseHeaders.set(HttpHeaders.CONTENT_TYPE, contentType + "; charset=" + encodingCharset); + } else { + if (!contentType.contains(encodingCharset)) { + logger.warn("Existing content type charset does not match the encodingCharset: " + encodingCharset); + } } }