티스토리 뷰

  • RestTemplate으로 외부 연동 API 응답 값을 받을때 굉장히 다양한 case convention을 경험할 수 있다.

  • 하지만 restTemplate에 기본적으로 등록되어 있는 messageConverters에서는 필드 매핑시 snake_case를 제대로 매핑하지 못해서 null이 들어가는 경우가 있다.

  • restTemplate에 Spring이 이미 등록한 기본 MappingJackson2HttpMessageConverter보다 우선하도록 새롭게 커스텀한 messageConverter를 등록하자.

  • jackson version 2.7 이전에서는

    • PropertyNamingStrategy. CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES 를

    • 이후 버전에서는 PropertyNamingStrategy.SNAKE_CASE 를 사용해야 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// AdapterConfig.java

...


private ObjectMapper createCustomObjectMapper() {
  ObjectMapper objectMapper = new ObjectMapper();
  objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
  return objectMapper;
}
 
private MappingJackson2HttpMessageConverter createMappingJackson2HttpMessageConverter() {
  MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
  converter.setObjectMapper(createCustomObjectMapper());
  return converter;
}
 
@Bean(name = "restTemplate")
public RestTemplate restTemplate() {
  RestTemplate restTemplate = new RestTemplate(clientHttpRequestFactory());
  restTemplate.getMessageConverters().add(0, createMappingJackson2HttpMessageConverter());
  return restTemplate;
}

...

cs


댓글