Spring Framework
ObjectMppaer ParameterNamesModule 알아보기
Junuuu
2023. 12. 24. 00:01
728x90
개요
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