Skip to content

Commit ddde2fa

Browse files
authored
Add date serializer to api (#654)
1 parent 33f8302 commit ddde2fa

File tree

4 files changed

+111
-0
lines changed

4 files changed

+111
-0
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package co.nilin.opex.api.ports.opex.config
2+
3+
import co.nilin.opex.api.ports.opex.util.DateToEpochSerializer
4+
import co.nilin.opex.api.ports.opex.util.LocalDateTimeToEpochSerializer
5+
import co.nilin.opex.api.ports.opex.util.LocalDateToEpochSerializer
6+
import com.fasterxml.jackson.databind.ObjectMapper
7+
import com.fasterxml.jackson.databind.json.JsonMapper
8+
import com.fasterxml.jackson.databind.module.SimpleModule
9+
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule
10+
import com.fasterxml.jackson.module.kotlin.KotlinModule
11+
import org.springframework.context.annotation.Bean
12+
import org.springframework.context.annotation.Configuration
13+
import org.springframework.context.annotation.Primary
14+
import java.time.LocalDate
15+
import java.time.LocalDateTime
16+
import java.util.*
17+
18+
@Configuration
19+
class ApiJacksonConfig {
20+
21+
@Bean
22+
@Primary
23+
fun apiObjectMapper(): ObjectMapper {
24+
25+
val module = SimpleModule().apply {
26+
addSerializer(LocalDateTime::class.java, LocalDateTimeToEpochSerializer())
27+
addSerializer(LocalDate::class.java, LocalDateToEpochSerializer())
28+
addSerializer(Date::class.java, DateToEpochSerializer())
29+
30+
}
31+
32+
return JsonMapper.builder()
33+
.addModule(JavaTimeModule())
34+
.addModule(KotlinModule.Builder().build())
35+
.addModule(module)
36+
.build()
37+
}
38+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package co.nilin.opex.api.ports.opex.util
2+
3+
import com.fasterxml.jackson.core.JsonGenerator
4+
import com.fasterxml.jackson.databind.JsonSerializer
5+
import com.fasterxml.jackson.databind.SerializerProvider
6+
import java.util.*
7+
8+
class DateToEpochSerializer :
9+
JsonSerializer<Date>() {
10+
11+
override fun serialize(
12+
value: Date?,
13+
gen: JsonGenerator,
14+
serializers: SerializerProvider
15+
) {
16+
if (value == null) {
17+
gen.writeNull()
18+
return
19+
}
20+
gen.writeNumber(value.time)
21+
}
22+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package co.nilin.opex.api.ports.opex.util
2+
3+
import com.fasterxml.jackson.core.JsonGenerator
4+
import com.fasterxml.jackson.databind.JsonSerializer
5+
import com.fasterxml.jackson.databind.SerializerProvider
6+
import java.time.LocalDateTime
7+
import java.time.ZoneOffset
8+
9+
class LocalDateTimeToEpochSerializer :
10+
JsonSerializer<LocalDateTime>() {
11+
12+
override fun serialize(
13+
value: LocalDateTime,
14+
gen: JsonGenerator,
15+
serializers: SerializerProvider
16+
) {
17+
val epochMillis = value
18+
.atOffset(ZoneOffset.UTC)
19+
.toInstant()
20+
.toEpochMilli()
21+
22+
gen.writeNumber(epochMillis)
23+
}
24+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package co.nilin.opex.api.ports.opex.util
2+
3+
import com.fasterxml.jackson.core.JsonGenerator
4+
import com.fasterxml.jackson.databind.JsonSerializer
5+
import com.fasterxml.jackson.databind.SerializerProvider
6+
import java.time.LocalDate
7+
import java.time.ZoneOffset
8+
9+
class LocalDateToEpochSerializer : JsonSerializer<LocalDate>() {
10+
override fun serialize(
11+
value: LocalDate?,
12+
gen: JsonGenerator,
13+
serializers: SerializerProvider
14+
) {
15+
if (value == null) {
16+
gen.writeNull()
17+
return
18+
}
19+
20+
val epochMillis = value
21+
.atStartOfDay(ZoneOffset.UTC)
22+
.toInstant()
23+
.toEpochMilli()
24+
25+
gen.writeNumber(epochMillis)
26+
}
27+
}

0 commit comments

Comments
 (0)