diff --git a/src/main/java/sdung/ongil/domain/environment/service/EnvironmentService.java b/src/main/java/sdung/ongil/domain/environment/service/EnvironmentService.java index 178297d..f5b3fa9 100644 --- a/src/main/java/sdung/ongil/domain/environment/service/EnvironmentService.java +++ b/src/main/java/sdung/ongil/domain/environment/service/EnvironmentService.java @@ -25,7 +25,9 @@ public WeatherResponseDto getWeather(double lat, double lng) { GridConverter.Grid grid = GridConverter.toGrid(lat, lng); KmaWeatherApiResponse response = kmaWeatherClient.getUltraSrtNcst(grid.nx(), grid.ny()); - List items = response.getResponse().getBody().getItems().getItem(); + KmaWeatherApiResponse.Items itemsWrapper = response.getResponse().getBody().getItems(); + List items = + (itemsWrapper == null || itemsWrapper.getItem() == null) ? List.of() : itemsWrapper.getItem(); Map values = items.stream() .collect(Collectors.toMap( KmaWeatherApiResponse.Item::getCategory, @@ -45,7 +47,10 @@ public WeatherResponseDto getWeather(double lat, double lng) { public SafetyResponseDto getSafety(double lat, double lng) { String sidoName = kakaoRegionClient.getSidoName(lat, lng); AirKoreaApiResponse response = airKoreaClient.getRealtimeDensityBysido(sidoName); - List items = response.getResponse().getBody().getItems(); + + List rawItems = response.getResponse().getBody().getItems(); + List items = rawItems == null ? List.of() : rawItems; + AirKoreaApiResponse.Item nearest = items.isEmpty() ? null : items.get(0); Integer pm10 = nearest == null ? null : parseInt(nearest.getPm10Value()); Integer pm25 = nearest == null ? null : parseInt(nearest.getPm25Value()); diff --git a/src/main/java/sdung/ongil/domain/environment/service/RestTemplateConfig.java b/src/main/java/sdung/ongil/domain/environment/service/RestTemplateConfig.java index 0549785..c26ea68 100644 --- a/src/main/java/sdung/ongil/domain/environment/service/RestTemplateConfig.java +++ b/src/main/java/sdung/ongil/domain/environment/service/RestTemplateConfig.java @@ -1,13 +1,22 @@ package sdung.ongil.domain.environment.service; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.web.client.RestTemplate; @Configuration +@SuppressWarnings("removal") public class RestTemplateConfig { @Bean public RestTemplate restTemplate() { - return new RestTemplate(); + ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, true); + MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(objectMapper); + RestTemplate restTemplate = new RestTemplate(); + restTemplate.getMessageConverters().add(0, converter); + return restTemplate; } }