Bepoz
파즈의 공부 일기
Bepoz
전체 방문자
오늘
어제
  • 분류 전체보기 (232)
    • 공부 기록들 (85)
      • 우테코 (17)
    • Spring (85)
    • Java (43)
    • Infra (17)
    • 책 정리 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Bepoz

파즈의 공부 일기

Java

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

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 클래스도 잘 읽어올 수가 있다.


'Java' 카테고리의 다른 글

[Java] AttributeConverter를 이용하여 DB에 Entity의 컬렉션 필드 저장하기  (0) 2022.08.02
[Java] ThreadLocal에 대해  (0) 2021.12.05
[Java] Atomic, Volatile, Synchronized 에 대해  (2) 2021.09.20
[Java] Reflection 사용법 정리  (0) 2021.09.08
[Java] ExecutorService 와 ThreadPoolExecutor 에 대해  (0) 2021.09.06
    'Java' 카테고리의 다른 글
    • [Java] AttributeConverter를 이용하여 DB에 Entity의 컬렉션 필드 저장하기
    • [Java] ThreadLocal에 대해
    • [Java] Atomic, Volatile, Synchronized 에 대해
    • [Java] Reflection 사용법 정리
    Bepoz
    Bepoz
    https://github.com/Be-poz/TIL

    티스토리툴바