Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package co.nilin.opex.api.ports.opex.config

import co.nilin.opex.api.ports.opex.util.DateToEpochSerializer
import co.nilin.opex.api.ports.opex.util.LocalDateTimeToEpochSerializer
import co.nilin.opex.api.ports.opex.util.LocalDateToEpochSerializer
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.databind.json.JsonMapper
import com.fasterxml.jackson.databind.module.SimpleModule
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule
import com.fasterxml.jackson.module.kotlin.KotlinModule
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.context.annotation.Primary
import java.time.LocalDate
import java.time.LocalDateTime
import java.util.*

@Configuration
class ApiJacksonConfig {

@Bean
@Primary
fun apiObjectMapper(): ObjectMapper {

val module = SimpleModule().apply {
addSerializer(LocalDateTime::class.java, LocalDateTimeToEpochSerializer())
addSerializer(LocalDate::class.java, LocalDateToEpochSerializer())
addSerializer(Date::class.java, DateToEpochSerializer())

}

return JsonMapper.builder()
.addModule(JavaTimeModule())
.addModule(KotlinModule.Builder().build())
.addModule(module)
.build()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package co.nilin.opex.api.ports.opex.util

import com.fasterxml.jackson.core.JsonGenerator
import com.fasterxml.jackson.databind.JsonSerializer
import com.fasterxml.jackson.databind.SerializerProvider
import java.util.*

class DateToEpochSerializer :
JsonSerializer<Date>() {

override fun serialize(
value: Date?,
gen: JsonGenerator,
serializers: SerializerProvider
) {
if (value == null) {
gen.writeNull()
return
}
gen.writeNumber(value.time)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package co.nilin.opex.api.ports.opex.util

import com.fasterxml.jackson.core.JsonGenerator
import com.fasterxml.jackson.databind.JsonSerializer
import com.fasterxml.jackson.databind.SerializerProvider
import java.time.LocalDateTime
import java.time.ZoneOffset

class LocalDateTimeToEpochSerializer :
JsonSerializer<LocalDateTime>() {

override fun serialize(
value: LocalDateTime,
gen: JsonGenerator,
serializers: SerializerProvider
) {
val epochMillis = value
.atOffset(ZoneOffset.UTC)
.toInstant()
.toEpochMilli()

gen.writeNumber(epochMillis)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package co.nilin.opex.api.ports.opex.util

import com.fasterxml.jackson.core.JsonGenerator
import com.fasterxml.jackson.databind.JsonSerializer
import com.fasterxml.jackson.databind.SerializerProvider
import java.time.LocalDate
import java.time.ZoneOffset

class LocalDateToEpochSerializer : JsonSerializer<LocalDate>() {
override fun serialize(
value: LocalDate?,
gen: JsonGenerator,
serializers: SerializerProvider
) {
if (value == null) {
gen.writeNull()
return
}

val epochMillis = value
.atStartOfDay(ZoneOffset.UTC)
.toInstant()
.toEpochMilli()

gen.writeNumber(epochMillis)
}
}
Loading