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