Java

[Kotlin] 기본 생성자가 없고, 필드가 1개여도 코틀린은 역직렬화가 된다

Bepoz 2023. 5. 12. 00:31

기본 생성자가 없고, 필드가 1개여도 코틀린은 역직렬화가 된다

class BepozDTOTest {

    @Test
    fun convertTest() {
        val mapper = jacksonObjectMapper()
        val mapper2 = ObjectMapper()
        val json = "{\"name\": \"kang\"}"
        val result: BepozDTO = mapper.readValue(json)
        val result2: BepozDTO = mapper2.readValue(json)
    }
}

data class BepozDTO(
    val name: String
)

자바의 경우 jackson 2.13버전 부터 추가된 jackson-module-parameter-names 모듈에 의해 기본 생성자가 없어도 다른 생성자를 통해 body값을 역직렬화하여 읽어올 수가 있었다. 다만, 필드가 1개인 경우에는 이유는 모르겠지만 불가능했다.

그런데 코틀린에서는 필드가 1개여도 원활하게 돌아가는 것을 확인할 수가 있었다.

그 이유는 jackson-module-kotlin 모듈이 존재하기 때문에 그런 것이라고 추측하고 있다(100% 인 것 같긴함).
다만, 테스트 코드에서 ObejctMapper() 로만 json을 읽어오면 예외가 터진다.

jacksonObjectMapper()는 문제없이 json을 읽어올 수가 있는데 해당 메서드 내부를 살펴보면

fun jacksonObjectMapper(): ObjectMapper = jsonMapper { addModule(kotlinModule()) }

kotlinModule을 추가한 것을 확인할 수가 있다.

이를 통해 코틀린은 data class를 이용한 DTO 클래스도 잘 읽어올 수가 있다.