diff --git a/build.gradle b/build.gradle index 1a33215..ab4a06d 100644 --- a/build.gradle +++ b/build.gradle @@ -34,6 +34,7 @@ dependencies { implementation 'org.zalando:spring-cloud-config-aws-kms:5.1.2' implementation 'com.amazonaws:aws-java-sdk-kms:1.12.429' implementation 'com.amazonaws:jmespath-java:1.12.468' + implementation group: 'org.json', name: 'json', version: '20160810' compileOnly 'org.projectlombok:lombok:1.18.26' developmentOnly 'org.springframework.boot:spring-boot-devtools:3.0.4' diff --git a/src/main/java/com/catcher/batch/core/converter/CatcherConverter.java b/src/main/java/com/catcher/batch/core/converter/CatcherConverter.java new file mode 100644 index 0000000..facc9bb --- /dev/null +++ b/src/main/java/com/catcher/batch/core/converter/CatcherConverter.java @@ -0,0 +1,42 @@ +package com.catcher.batch.core.converter; + +import com.catcher.batch.core.dto.MovieApiResponse; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.json.JSONObject; + +public class CatcherConverter { + private final String headerPath; + private final ObjectMapper objectMapper; + private final Class clazz; + + public CatcherConverter(Class responseType, String headerPath) { + this.clazz = responseType; + this.headerPath = headerPath; + objectMapper = new ObjectMapper(); + } + + public T parse(String jsonMessage) { + JSONObject jsonObject = getJsonObject(jsonMessage); + + try { + return objectMapper.readValue(jsonObject.toString(), clazz); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } + + private JSONObject getJsonObject(String json) { + if(headerPath == null) { + throw new IllegalStateException(); + } + + JSONObject jsonObject = new JSONObject(json); + String[] subPath = headerPath.split("\\."); + + for (String path : subPath) { + jsonObject = jsonObject.getJSONObject(path); + } + return jsonObject; + } +} diff --git a/src/main/java/com/catcher/batch/core/dto/MovieApiResponse.java b/src/main/java/com/catcher/batch/core/dto/MovieApiResponse.java index 486bcdf..11f3386 100644 --- a/src/main/java/com/catcher/batch/core/dto/MovieApiResponse.java +++ b/src/main/java/com/catcher/batch/core/dto/MovieApiResponse.java @@ -1,4 +1,5 @@ package com.catcher.batch.core.dto; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; import lombok.Setter; @@ -7,7 +8,7 @@ @Setter @Getter public class MovieApiResponse { - + @JsonProperty("dailyBoxOfficeList") private List response; @Getter diff --git a/src/main/java/com/catcher/batch/core/service/MovieRestApiService.java b/src/main/java/com/catcher/batch/core/service/MovieRestApiService.java index 69f1d43..e7fc065 100644 --- a/src/main/java/com/catcher/batch/core/service/MovieRestApiService.java +++ b/src/main/java/com/catcher/batch/core/service/MovieRestApiService.java @@ -1,6 +1,7 @@ package com.catcher.batch.core.service; import com.catcher.batch.config.RestTemplateConfig; +import com.catcher.batch.core.converter.CatcherConverter; import com.catcher.batch.core.converter.JsonConverter; import com.catcher.batch.core.dto.MovieApiResponse; import com.catcher.batch.infrastructure.service.KmsService; @@ -49,12 +50,14 @@ public MovieApiResponse getOpenApi() { .encode() .toUri(); - ResponseEntity responseEntity = restTemplateConfig.restTemplate().getForEntity(apiUrl, HashMap.class); - HashMap map = (HashMap) responseEntity.getBody().get("boxOfficeResult"); - List movieItemDTOList = (List) map.get("dailyBoxOfficeList"); - MovieApiResponse response = new MovieApiResponse(); - response.setResponse(movieItemDTOList); +// ResponseEntity responseEntity = restTemplateConfig.restTemplate().getForEntity(apiUrl, HashMap.class); +// HashMap map = (HashMap) responseEntity.getBody().get("boxOfficeResult"); +// List movieItemDTOList = (List) map.get("dailyBoxOfficeList"); +// MovieApiResponse response = new MovieApiResponse(); +// response.setResponse(movieItemDTOList); - return response; + ResponseEntity responseEntity = restTemplateConfig.restTemplate().getForEntity(apiUrl, String.class); + CatcherConverter movieConverter = new CatcherConverter(MovieApiResponse.class, "boxOfficeResult"); + return movieConverter.parse(responseEntity.getBody()); } }