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()
}
}
반응형