From cf86f2a11a8bcefc99d2e0cdd537a57e5f0817d4 Mon Sep 17 00:00:00 2001 From: Sungpil Hyun Date: Tue, 28 May 2024 12:18:28 +0900 Subject: [PATCH] =?UTF-8?q?=EC=9D=91=EB=8B=B5=EA=B4=80=EB=A6=AC=20?= =?UTF-8?q?=EC=9D=B8=EC=BD=94=EB=94=A9=20=EC=B2=98=EB=A6=AC=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eactive/testmaster/ElinkTestMaster.java | 1 - .../api/controller/MockApiController.java | 34 ++++++++++++++----- .../testmaster/api/dto/MockResponseDTO.java | 11 ++++++ .../testmaster/api/entity/MockResponse.java | 10 ++++++ .../service/ApiRequestMigrationService.java | 3 ++ .../templates/page/routes/mockRouteEdit.html | 12 +++++++ 6 files changed, 61 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/eactive/testmaster/ElinkTestMaster.java b/src/main/java/com/eactive/testmaster/ElinkTestMaster.java index 590e2a3..c92491a 100644 --- a/src/main/java/com/eactive/testmaster/ElinkTestMaster.java +++ b/src/main/java/com/eactive/testmaster/ElinkTestMaster.java @@ -14,5 +14,4 @@ public class ElinkTestMaster { public static void main(String[] args) { SpringApplication.run(ElinkTestMaster.class, args); } - } 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 94ecd55..1b2aeb3 100644 --- a/src/main/java/com/eactive/testmaster/api/controller/MockApiController.java +++ b/src/main/java/com/eactive/testmaster/api/controller/MockApiController.java @@ -7,12 +7,7 @@ import com.eactive.testmaster.api.entity.MockCondition; import com.eactive.testmaster.api.entity.MockResponse; import com.eactive.testmaster.api.entity.MockRoute; import com.eactive.testmaster.api.service.MockRouteService; -import java.io.IOException; -import java.net.URLDecoder; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; -import javax.servlet.http.HttpServletRequest; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpHeaders; @@ -21,6 +16,14 @@ import org.springframework.http.ResponseEntity; import org.springframework.util.AntPathMatcher; import org.springframework.web.bind.annotation.RestController; +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + @RestController public class MockApiController { @@ -66,9 +69,20 @@ public class MockApiController { HttpHeaders responseHeaders = new HttpHeaders(); matchingResponse.getHeaders().forEach(responseHeaders::set); + String encodingCharset = StringUtils.isNotEmpty(matchingResponse.getEncodingCharset()) ? matchingResponse.getEncodingCharset() : System.getProperty("file.encoding"); + + if (!responseHeaders.containsKey(HttpHeaders.CONTENT_TYPE)) { + responseHeaders.add(HttpHeaders.CONTENT_TYPE, "text/plain; charset=" + encodingCharset); + } else { + String contentType = responseHeaders.getFirst(HttpHeaders.CONTENT_TYPE); + if (!contentType.contains("charset")) { + responseHeaders.set(HttpHeaders.CONTENT_TYPE, contentType + "; charset=" + encodingCharset); + } + } + request.getParams().putAll(pathVariables); - return new ResponseEntity<>(replaceParams(matchingResponse.getBody(), request.getParams()), responseHeaders, HttpStatus.valueOf(matchingResponse.getStatusCode())); + return new ResponseEntity<>(replaceParams(matchingResponse.getBody(), request.getParams(), encodingCharset), responseHeaders, HttpStatus.valueOf(matchingResponse.getStatusCode())); } } } @@ -77,11 +91,13 @@ public class MockApiController { return ResponseEntity.status(HttpStatus.NOT_FOUND).body("Not Found"); } - private String replaceParams(String responseBody, Map params) { + private String replaceParams(String responseBody, Map params, String encodingCharset) throws UnsupportedEncodingException { for (Map.Entry entry : params.entrySet()) { responseBody = responseBody.replace("{" + entry.getKey() + "}", entry.getValue()); } - return responseBody; + + byte[] sourceBytes = responseBody.getBytes(encodingCharset); + return new String(sourceBytes, encodingCharset); } private boolean isRouteMatch(MockRoute mockRoute, MockRequest request) { diff --git a/src/main/java/com/eactive/testmaster/api/dto/MockResponseDTO.java b/src/main/java/com/eactive/testmaster/api/dto/MockResponseDTO.java index f97b960..a4d3109 100644 --- a/src/main/java/com/eactive/testmaster/api/dto/MockResponseDTO.java +++ b/src/main/java/com/eactive/testmaster/api/dto/MockResponseDTO.java @@ -18,6 +18,9 @@ public class MockResponseDTO { private String defaultResponse; private List conditions; + + private String encodingCharset; + public int getStatusCode() { return statusCode; } @@ -65,4 +68,12 @@ public class MockResponseDTO { public void setDefaultResponse(String defaultResponse) { this.defaultResponse = defaultResponse; } + + public String getEncodingCharset() { + return encodingCharset; + } + + public void setEncodingCharset(String encodingCharset) { + this.encodingCharset = encodingCharset; + } } diff --git a/src/main/java/com/eactive/testmaster/api/entity/MockResponse.java b/src/main/java/com/eactive/testmaster/api/entity/MockResponse.java index 7abac78..7ecc44a 100644 --- a/src/main/java/com/eactive/testmaster/api/entity/MockResponse.java +++ b/src/main/java/com/eactive/testmaster/api/entity/MockResponse.java @@ -50,6 +50,8 @@ public class MockResponse { @OneToMany(mappedBy = "mockResponse", cascade = CascadeType.ALL, orphanRemoval = true) private List conditions = new ArrayList<>(); + private String encodingCharset; + public Long getId() { return id; } @@ -113,4 +115,12 @@ public class MockResponse { public void setDefaultResponse(boolean defaultResponse) { this.defaultResponse = defaultResponse; } + + public String getEncodingCharset() { + return encodingCharset; + } + + public void setEncodingCharset(String encodingCharset) { + this.encodingCharset = encodingCharset; + } } diff --git a/src/main/java/com/eactive/testmaster/client/service/ApiRequestMigrationService.java b/src/main/java/com/eactive/testmaster/client/service/ApiRequestMigrationService.java index 9b60a04..a2ec3c4 100644 --- a/src/main/java/com/eactive/testmaster/client/service/ApiRequestMigrationService.java +++ b/src/main/java/com/eactive/testmaster/client/service/ApiRequestMigrationService.java @@ -51,6 +51,9 @@ public class ApiRequestMigrationService { apiRequestRepository.save(apiRequest); }); + String fileEncoding = System.getProperty("file.encoding"); + System.out.println(fileEncoding); + } } diff --git a/src/main/resources/templates/page/routes/mockRouteEdit.html b/src/main/resources/templates/page/routes/mockRouteEdit.html index 2795cbd..2cd85ab 100644 --- a/src/main/resources/templates/page/routes/mockRouteEdit.html +++ b/src/main/resources/templates/page/routes/mockRouteEdit.html @@ -83,6 +83,7 @@ +
  • @@ -158,6 +159,10 @@ +
    + + +
    @@ -282,6 +287,7 @@ //statusCode, delay, defaultResponse, body 로 끝나는 항목을 찾음 response.statusCode = $(this).find('input[name$="statusCode"]').val(); response.delay = $(this).find('input[name$="delay"]').val(); + response.encodingCharset = $(this).find('input[name$="encodingCharset"]').val(); response.defaultResponse = $(this).find('input[name$="defaultResponse"]').val()==='true'; response.body = $(this).find('textarea[name$="body"]').val(); @@ -389,11 +395,13 @@ nodeCopy.find('input[name="statusCode"]').attr('name', 'responses[' + i + '].statusCode'); nodeCopy.find('input[name="defaultResponse"]').attr('name', 'responses[' + i + '].defaultResponse'); nodeCopy.find('input[name="delay"]').attr('name', 'responses[' + i + '].delay'); + nodeCopy.find('input[name="encodingCharset"]').attr('name', 'responses[' + i + '].encodingCharset'); nodeCopy.find('textarea[name="body"]').attr('name', 'responses[' + i + '].body'); nodeCopy.find('input[name="responses[' + i + '].statusCode"]').val(model.responses[i].statusCode); nodeCopy.find('input[name="responses[' + i + '].defaultResponse"]').val(model.responses[i].defaultResponse); nodeCopy.find('input[name="responses[' + i + '].delay"]').val(model.responses[i].delay); + nodeCopy.find('input[name="responses[' + i + '].encodingCharset"]').val(model.responses[i].encodingCharset); let me = this; @@ -421,6 +429,10 @@ model.responses[i].delay = $(this).val(); }); + nodeCopy.find('input[name="responses[' + i + '].encodingCharset"]').on('input', function () { + model.responses[i].encodingCharset = $(this).val(); + }); + $('#responseTabContent').append(nodeCopy); if(view.currentIdx >= model.responses.length){ view.currentIdx = model.responses.length - 1;