Closed minho-jang closed 2 years ago
Closes #74
Jackson 라이브러리의 ObjectMapper는 json을 다룰 때 필요한 객체이다.
ObjectMapper
Spring에서 json 메시지를 변환하기 위해 MappingJackson2HttpMessageConverter에서 사용한다. JacksonAutoConfiguration에 의해서 ObjectMapper는 빈으로 등록된다.
MappingJackson2HttpMessageConverter
JacksonAutoConfiguration
기존에 테스트 환경에서, 이를 @Autowired로 주입받아서 사용했다. 그럴 필요가 없다는 것을 느끼고 직접 new로 생성하여 테스트하려 했으나 에러가 발생했다.
@Autowired
new
객체의 기본 생성자가 없기에 발생한 에러였다. 기본 생성자를 생성하여 해결할 수 있으나, 왜 주입받았을 때는 이게 필요가 없는지 살펴봤다.
디버깅 결과, 주입받은 ObjectMapper는 PropertyBasedCreator라는 필드를 가지고 있었고, 직접 생성한 ObjectMapper는 이 필드가 null이었다. 이 필드에 의해 분기된 이후에 기본 생성자를 확인하면서 에러를 뿜었다.
PropertyBasedCreator
null
더 파고들어봐야 알겠지만, Spring에서 ObjectMapper는 Builder에 의해서 생성되는데 이 때 적용되는 config의 차이가 아닐까 짐작해본다.
Lombok의 @NoArgsConstructor(access = AccessLevel.PRIVATE)를 추가한다.
@NoArgsConstructor(access = AccessLevel.PRIVATE)
Jackson 라이브러리의
ObjectMapper
는 json을 다룰 때 필요한 객체이다.Spring에서 json 메시지를 변환하기 위해
MappingJackson2HttpMessageConverter
에서 사용한다.JacksonAutoConfiguration
에 의해서ObjectMapper
는 빈으로 등록된다.문제
기존에 테스트 환경에서, 이를
@Autowired
로 주입받아서 사용했다. 그럴 필요가 없다는 것을 느끼고 직접new
로 생성하여 테스트하려 했으나 에러가 발생했다.과정
객체의 기본 생성자가 없기에 발생한 에러였다. 기본 생성자를 생성하여 해결할 수 있으나, 왜 주입받았을 때는 이게 필요가 없는지 살펴봤다.
디버깅 결과, 주입받은
ObjectMapper
는PropertyBasedCreator
라는 필드를 가지고 있었고, 직접 생성한ObjectMapper
는 이 필드가null
이었다. 이 필드에 의해 분기된 이후에 기본 생성자를 확인하면서 에러를 뿜었다.더 파고들어봐야 알겠지만, Spring에서
ObjectMapper
는 Builder에 의해서 생성되는데 이 때 적용되는 config의 차이가 아닐까 짐작해본다.결론
Lombok의
@NoArgsConstructor(access = AccessLevel.PRIVATE)
를 추가한다.