ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ObjectMppaer ParameterNamesModule 알아보기
    Spring Framework 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

     

    댓글

Designed by Tistory.