개발/ktor

[Ktor] Ktor 서버에서 LocalDateTime 을 json 으로 반환하기

hojak99 2021. 4. 3. 23:39

Ktor 공식문서를 참고해서 ContentNegotiation 를 install 에서 repsonse 에 객체를 담아 json 으로 내보내려고 할 때를 위해 사용하려고 했다.

Ktor 에서 지원해주는 Gson, Jackson, kotlinx.serializaiton 을 이용해서 굳이 직접 converter 를 설정해주지 않도록 하려고 했다.

그래서 그 중 평소에 사용하는 Jackson 을 사용하는 것으로 했고,

간단하게 저런 식으로 LocalDateTime 으로 반환하려고 했으나 map 형태로 반환이 돼 추가적으로 conveter 를 구현하여 jackson objectMapper 에 모듈로 추가를 해줘야 했다.

jackson-datatype-jsr310 해당 의존성 추가해서 작업하려고 했는데 의존성 또 추가하기 싫어서 직접 구현 해주었다.

class CustomLocalDateTimeConverter : JsonSerializer<LocalDateTime>() {
    private companion object {
        val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss")!!
    }

    override fun serialize(value: LocalDateTime?, gen: JsonGenerator, serializers: SerializerProvider) {
        gen.writeString(formatter.format(value));
    }
}

 

fun Application.commonRouting() {
    install(ContentNegotiation) {
        jackson {
            enable(SerializationFeature.INDENT_OUTPUT)
            registerModules(
                SimpleModule().addSerializer(LocalDateTime::class.java, CustomLocalDateTimeConverter())
            )
        }
    }

    routing {
        mainGet()
    }
}

 

반응형