[Spring] RestTemplate 커스터마이징하기!

현주·2024년 4월 24일

프로젝트를 진행하면서 Google Places Api를 사용했는데, 이 API의 응답 값은 snake_case 형태로 들어온다.

그런데 우리 프로젝트의 경우, 변수 명명 규칙으로 camelCase를 사용하기 때문에,
API 응답 값을 프로젝트의 규칙에 맞게 변환할 필요가 있었다.

그래서 나는 RestTemplate을 커스터마이징하여 Google Places API로부터 받은 snake_case 형식의 응답을 camelCase로 변환하였다.

✔️ RestTemplate
➜ HTTP 요청을 보내고 응답을 받기 위해 사용되는 스프링 프레임워크의 클래스

@Configuration
public class RestTemplateConfig {@Bean
	public RestTemplate restTemplate() {
		RestTemplate restTemplate = new RestTemplate();ObjectMapper objectMapper = new ObjectMapper(); // Jackson ObjectMapper 인스턴스 생성
⠀ 
objectMapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE); // 응답 데이터의 snake_case --> camelCase 변환 설정
⠀ 
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); // 알려지지 않은 JSON 필드를 무시하도록 설정// ObjectMapper를 사용하는 메시지 컨버터 생성 및 추가
		MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();
		messageConverter.setObjectMapper(objectMapper);
		restTemplate.getMessageConverters().add(0, messageConverter);return restTemplate;
	}
}

그리고 프로젝트에서는 GooglePlaceServiceImpl 클래스 내에서 DI(Dependency Injection)를 통하여 커스터마이즈한 RestTemplate을 사용할 수 있도록,

아래와 같이 클래스 내에 RestTemplate 인스턴스를 주입받는 필드를 선언하였다.

import org.springframework.web.client.RestTemplate;@Service
@Transactional
@RequiredArgsConstructor
public class GooglePlaceServiceImpl implements GooglePlaceService {private final RestTemplate restTemplate;// 나머지 코드 생략
}

이렇게 하게되면 응답은 커스텀한 RestTemplate 대로 snake_case로 들어오게 된다!

0개의 댓글