-
ObjectMppaer ParameterNamesModule 알아보기Spring Framework 2023. 12. 24. 00:01728x90
개요
ObjectMapper에 기본적으로 등록되는 모듈로는 ParameterNamesModule이 있습니다.
해당 모듈은 어떤 역할을 수행하는지 궁금하여 알아보고자 합니다.
Spring Boot Jacson Auto-Configuration
@Configuration(proxyBeanMethods = false) @ConditionalOnClass(ParameterNamesModule.class) static class ParameterNamesModuleConfiguration { @Bean @ConditionalOnMissingBean ParameterNamesModule parameterNamesModule() { return new ParameterNamesModule(JsonCreator.Mode.DEFAULT); } }
JacksonAutoConfiguration 클래스 내부에 ParameterNamesModule을 빈으로 등록해 주는 코드가 존재합니다.
ParameterNamesModule은 무슨 역할을 수행할까?
Jackson을 통하여 역직렬화를 수행하기 위해서는 기본 생성자가 필요합니다.
이때 ParameterNamesModule은 기본생성자가 존재하지 않아도 class의 parameter 이름에 접근할 수 있도록 도와주는 역할을 수행합니다.
예를 들면 @JsonProperty와 같은 역할을 자동으로 수행해줍니다.
프로퍼티가 한개인 DTO에서는 기본생성자 필요
class TestRequest(val id: String) @PostMapping("/jackson-test2") fun test2( @RequestBody testRequest: TestRequest, ): ResponseEntity<TestRequest>{ println(testRequest) return ResponseEntity.ok(testRequest) }
이런 경우에는 ParameterNamesModule이 등록되어 있더라도 기본생성자가 필요하다는 예외가 발생합니다.
방법 1 - Kotlin Module 등록
방법 2 - @JsonProperty 활용
방법 3 - 기본생성자 추가
개인적인 생각
웬만하면 DTO에는 기본생성자, 생성자를 만들어주자
참고자료
https://beaniejoy.tistory.com/76
'Spring Framework' 카테고리의 다른 글
Spring Boot 2.x 프로젝트 만들기 (0) 2024.02.07 @ConditionalOnMissingBean 알아보기 (0) 2023.12.29 FeignClient dismiss404 동작원리 (0) 2023.12.22 SpringBoot ObjectMapper customize 하는 방법 (0) 2023.12.21 FeignClient Response로 Http status 제어하기 (0) 2023.12.01